2010-07-29 76 views
2

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

理想情况下,我应该能够在编译该类之前知道这一点,但在编译该类之后也可以知道这一点。

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

回答

0

在运行时做这种事情的最好方法是使用方面。您可以根据软件包,类,方法签名来配置您的方面。你的方面可以知道预先批准的软件包/类/方法,并基于此建议。

2

如果您有.class文件,请使用字节码解析库(如BCEL)加载.class文件,然后查看常量池以查看引用了哪些类(作为类文字或通过方法/字段其他类)。

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(); 
} 

在那里你可以看到所有使用的类。不要忘了“ - 私人” - 选项或者你只会看到公众,保护和默认可见字段/方法

希望这有助于

+0

+1 javap的岩石,非常有用的工具 – helpermethod 2010-08-03 07:11:15