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

问题描述 投票:10回答:3

嗨,我是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但是它没有很好地阐述,所以,需要一些良好的帮助方向。

提前致谢。

java reflection dependencies
3个回答
12
投票

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

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


12
投票

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

如果要查找已编译代码中使用的所有类型,这是一个稍微不同的问题。您可能希望将BCEL视为分析字节码的一种方式。


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);
    }
© www.soinside.com 2019 - 2024. All rights reserved.