我有一个类,我想确定从类中实际引用了哪些类。有没有简单的方法来确定直接使用哪些类?
理想情况下,我应该能够在编译类之前知道这一点,但是在编译完类之后知道这一点也是有效的。
我有一个运行时系统,用户可以在其中提供将要执行的“序列”。这些序列将在Java中执行。但是,我们希望警告用户是否使用了未包含在预先批准的API中的Java类。
答案 0 :(得分:3)
Java SDK中有一个名为javap的小工具,您可以对任何类文件运行,并为您提供该类的签名:
考虑这个课程:
public class Test{
private String name;
private int someValue;
private ClassLoader classLoader;
}
在该类上运行javap会产生:
# javap -private Test
Compiled from "Test.java"
public class Test extends java.lang.Object{
private java.lang.String name;
private int someValue;
private java.lang.ClassLoader classLoader;
public Test();
}
在那里你可以看到所有使用的类。不要忘记“-private” - 选项,否则您只能看到公共,受保护和默认的可见字段/方法
希望有所帮助
答案 1 :(得分:2)
如果您有.class文件,请使用字节码解析库(如BCEL)来加载.class文件,然后查看常量池以查看引用的类(作为类文字或通过其他方法/字段)类)。
答案 2 :(得分:0)
在运行时执行此类操作的最佳方法是使用方面。您可以将方面配置为根据包,类,方法签名进行建议。您的方面可以了解预先批准的包/类/方法,并基于此提供建议。