2011-03-31 48 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方法)。