【发布时间】:2012-03-08 01:02:47
【问题描述】:
我需要以编程方式计算给定 jar 文件中已编译类、接口和枚举的数量(因此我需要三个单独的数字)。哪个 API 可以帮助我? (我不能使用第三方库。)
我已经尝试了相当棘手的方案,但似乎并不总是正确的。即,我将每个 ZipEntry 读入一个 byte[],然后将结果提供给我的自定义类加载器,该类加载器扩展了标准 CalssLoader,并将这个 byte[] 发送到 ClassLoader.defineClass(它是保护的,不能直接从应用程序代码调用)。完整代码是on the Pastebin。
【问题讨论】:
-
你能打电话给
ZipEntry.getName()看看是不是.class文件吗?还是需要分别统计类和接口(以及枚举?)? -
我需要单独计算它们(此外众所周知,并非所有的 .class 文件都包含正确的字节码)。
-
我们希望不计算字节码不正确的 .class 文件。
-
在这种情况下,您现有的方法在这种情况下看起来不错 - 但在哪些情况下它无法正常工作?
-
我在 Apache commons-io.jar 上尝试过(直接链接:mmcs.sfedu.ru/~ulysses/Misc/commons-io.jar)那里有 76 个 .class 文件,但我的代码输出 47 2 0(类接口枚举)。
标签: java jar classloader