如何从终端查找特定 Java 类的包名称

如何从终端查找特定 Java 类的包名称

例如,假设我想使用 ArrayList,所以我必须使用

import java.util.ArrayList;

在我的 java 源代码中。但是如果我忘记了 ArrayList 包含在java.util包中。所以我如何找到AArrayList 类的包名称

  1. 假设我没有网络
  2. 假设我不想浏览源代码

答案1

我不确定你用什么进行开发,但我正在使用IntelliJ IDEA我永远不必关心任何导入语句。我只需开始输入ArrL,IDEA 会处理其余的事情。它会建议ArrayList<E>自动完成并立即修复导入语句。它只知道你想做什么,你可以专注于开发,而不是记住包名称:

在此处输入图片描述

编辑:

在命令行中执行此操作的一种简单方法是搜索src.zipSDK 附带的文件。因此,如果您尝试查找,ArrayList则可以执行

7z l src.zip | grep ArrayList

你会得到

2013-03-26 21:10:27 ..... 42659 8916 java/util/concurrent/CopyOnWriteArrayList.java
2013-03-26 21:10:27 ..... 21547 5814 java/util/ArrayList.java

您可以在此处查看包结构,因为它与子文件夹类似。我确信在某些情况下这种方法行不通,但您至少可以尝试一下。

答案2

假设$JAVA_HOME设置正确。

$ find $JAVA_HOME -name *.jar -print | xargs -n1 jar -tf | grep "ArrayList.class"
com/sun/istack/internal/FinalArrayList.class
com/sun/xml/internal/messaging/saaj/util/FinalArrayList.class
com/sun/xml/internal/org/jvnet/mimepull/FinalArrayList.class
sun/swing/BakedArrayList.class
sun/awt/util/IdentityArrayList.class
java/util/concurrent/CopyOnWriteArrayList.class
java/util/Arrays$ArrayList.class
java/util/ArrayList.class
com/sun/javafx/UnmodifiableArrayList.class
org/eclipse/equinox/internal/p2/core/helpers/CollectionUtils$UnmodifiableArrayList.class

小辅助函数,仍然假设JAVA_HOME已设置并正确设置

function jfind () 
{ 
    if [[ -z "$JAVA_HOME" ]]; then
        echo "Please set JAVA_HOME variable";
    else
        find $JAVA_HOME -name *.jar -print | xargs -n1 jar -tf | grep "$@";
    fi
}

更常见的解决方案

你可以JAVA_HOME用任何所需 jar 所在的路径来替换。例如你的项目路径:

$ find some_folder_with_jars -name *.jar -print | xargs -n1 jar -tf | grep "Awesome.class"

来源

基于回答

相关内容