我有一個類,我想確定哪些類實際上是從類中引用的。有沒有簡單的方法來確定哪些類直接被使用?確定類中使用哪些類
理想情況下,我應該能夠在編譯該類之前知道這一點,但在編譯該類之後也可以知道這一點。
我有一個運行時系統,用戶可以提供將要執行的「序列」。這些序列將在Java中執行。但是,如果用戶使用未包含在預先批准的API中的Java類,我們要警告用戶。
我有一個類,我想確定哪些類實際上是從類中引用的。有沒有簡單的方法來確定哪些類直接被使用?確定類中使用哪些類
理想情況下,我應該能夠在編譯該類之前知道這一點,但在編譯該類之後也可以知道這一點。
我有一個運行時系統,用戶可以提供將要執行的「序列」。這些序列將在Java中執行。但是,如果用戶使用未包含在預先批准的API中的Java類,我們要警告用戶。
在運行時做這種事情的最好方法是使用方面。您可以根據軟件包,類,方法簽名來配置您的方面。你的方面可以知道預先批准的軟件包/類/方法,並基於此建議。
如果您有.class文件,請使用字節碼解析庫(如BCEL)加載.class文件,然後查看常量池以查看引用了哪些類(作爲類文字或通過方法/字段其他類)。
有一個鮮爲人知的工具在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();
}
在那裏你可以看到所有使用的類。不要忘了「 - 私人」 - 選項或者你只會看到公衆,保護和默認可見字段/方法
希望這有助於
+1 javap的岩石,非常有用的工具 – helpermethod 2010-08-03 07:11:15