如何使用java反射在类中定义所有导入?

时间:2011-04-18 10:06:25

标签: java reflection dependencies

你好我是java反射域的新手。所以任何人都可以在这个问题场景中指导我。

我有名为“SomClass.java”导入名为“SomPackage.RefClass”的包 以及其他一些java库,如java.lang ..等等。

现在我希望通过反思了解课程中定义的所有导入。

import SomPackage.RefClass;
import java.lang.reflect.Field;
import java.io.IOException; 
 public class SomeClass{
  RefClass refClass_Obj;
  String nationality;
///some other members
}

我只想知道使用反射在类中定义的所有导入列表。

我看到Question发布了与我的Q类似的声音,但是没有详细说明,需要一些良好的帮助。

提前谢谢。

3 个答案:

答案 0 :(得分:12)

导入是一个编译时功能 - 在使用所提到的所有类型的全名的版本,使用*导入所有内容的版本和使用完全导入类的版本之间的编译代码没有区别名。

如果要在编译代码中找到使用的所有类型,那就有点不同了。您可能希望将BCEL视为分析字节码的一种方式。

答案 1 :(得分:12)

  

我只想知道所有的清单   使用在类中定义的import   反射

您不能因为编译器没有将它们放入目标文件中。它把它们抛弃了。导入只是编译器的简写。

答案 2 :(得分:4)

我认为您可以使用Qdox来获取实际上并非通过反射的类中的所有导入,但它可以满足您的目的:

    String fileFullPath = "Your\\java\\ file \\full\\path";
    JavaDocBuilder builder = new JavaDocBuilder();
    builder.addSource(new FileReader( fileFullPath  ));

    JavaSource src = builder.getSources()[0];
    String[] imports = src.getImports();

    for ( String imp : imports )
    {
        System.out.println(imp);
    }