2011-03-31 47 views

回答

4

請記住,進口僅僅是一種方便的機制,可以讓Java開發人員使用它很簡單名稱(Date),而不是它的完全合格的名稱是指一類(FQN - java.util.Datejava.sql.Date)。

因此,如果您運行.class文件through a decompiler,您可能會看到使用FQN的引用,並且可能沒有導入語句。

0

好吧,如果你只想做手工,我建議你看看反編譯器,如JD GUI

否則,你需要,如果你想以編程方式將此信息去思考方式。

0

如果您需要批量執行此操作,並且不想打擾反編譯器提供的所有其他詳細信息,則可以檢查常量池以獲取類引用。

請注意,如前所述,源導入僅僅是一種便利,並不直接對應於類文件中的任何內容。掃描常量池將而不是顯示從源文件中未使用的導入,它將而不是顯示僅用於編譯時常量(public static final String ...等)的類。它顯示FQNs甚至在同一包中的類,它顯示使用FQN引用沒有導入的類。它秀類,它們的簽名隱含使用:

URL loc = Something.class.getProtectionDomain().getCodeSource().getLocation(); 

會產生字節碼ProtectionDomainCodeSource引用盡管消息來源沒有明確提到他們。

https://hg.netbeans.org/core-main/raw-file/default/nbbuild/antsrc/org/netbeans/nbbuild/VerifyClassLinkage.java是如何執行此掃描的示例(請參閱dependencies方法)。

相關問題