确定在类中使用哪些类

时间:2010-07-29 09:55:18

标签: java

我有一个类,我想确定从类中实际引用了哪些类。有没有简单的方法来确定直接使用哪些类?

理想情况下,我应该能够在编译类之前知道这一点,但是在编译完类之后知道这一点也是有效的。

我有一个运行时系统,用户可以在其中提供将要执行的“序列”。这些序列将在Java中执行。但是,我们希望警告用户是否使用了未包含在预先批准的API中的Java类。

3 个答案:

答案 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)

在运行时执行此类操作的最佳方法是使用方面。您可以将方面配置为根据包,类,方法签名进行建议。您的方面可以了解预先批准的包/类/方法,并基于此提供建议。