反编译器支持Java 6中的<>

时间:2015-01-20 02:26:49

标签: java types decompiling

我有一些我反编译的类文件,但是我发现我的集合,列表,迭代器等旁边的<> s没有显示在输出中。

我尝试过CFR,Procyon,JD-GUI和FernFlower。

尝试重新编译这些类时,编译器无法提及我的<> s缺失的问题。

更新:<> s显示在Java 7反编译文件中,但不在Java 6反编译文件中,如下所示:

Java 7中的类: Class in Java 7

Java 6中的类: Class in Java 6

有谁知道为什么我可能没有在输出中获得<> s?

2 个答案:

答案 0 :(得分:0)

由于Type-Erasure的第一步是<{p}},您无法获得<>(s)

  

如果类型参数是无界的,则将泛型类型中的所有类型参数替换为其边界或Object。因此,生成的字节码只包含普通的类,接口和方法。

答案 1 :(得分:0)

这看起来像反编译器中的一个错误。你在两种情况下都使用相同的版本吗?

对于公共字段(就像方法一样),类型注释被保留(因为它们需要针对类进行编译)。

但请注意,注释的右侧不会保留注释(因为它不是类签名的一部分)。