我有一个jar文件,可以列出jar中的所有类。 jar中的类可以是public,protected或package范围。我想知道是否可以说出范围并仅列出公共课程吗?

最佳答案

您可以这样做,而且我不仅仅可以想到一种方法,这里有两种:


您可以使用字节码操作工具读取.class文件并获取修饰符。缺点是您需要一个额外的库。好处是这种方式非常安全,因为您无需将类加载到VM中,只需将类加载到内存中,因此无需执行任何代码,并且如果.jar类依赖于不可用的类,则这方式仍然可以使用。
您可以将此ClassLoader.jar一起使用,并加载每个类,然后使用Reflection检查它。好处是您不需要任何第三方库。缺点是,为了检查这些类,它们需要由ClassLoader加载,这意味着将执行这些类的代码(静态初始化器)。如果这是不受信任的第三方代码,则需要先安装SecurityManager来沙箱这些类。另一个缺点是,如果这些类依赖于其他不可用的类(例如,通过扩展此类不可用的类),则此方法将失败。
您可以使用javap工具检查类。

关于java - 以编程方式列出jar中的所有公共(public)类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35728273/

10-10 10:36
查看更多