2010-07-29 74 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