我目前遇到一种奇怪的情况,即某些TypeAnnotation坐标/路径数据最终会被删除。下面的界面,虽然显然不是你在实际代码中看到的任何东西(这只是为了实验目的),但产生的似乎是擦除的坐标数据。
public interface WhackedOutCoordinates<M extends
@Whoopy Derpable<@Whoopy ? extends Comparable<@Whoopy M>>
&@Whoopy Comparable<@Whoopy List<? super @Whoopy M>>
&@Whoopy Serializable> {}
javap的输出如下:
0: #10(): CLASS_TYPE_PARAMETER_BOUND, param_index=0, bound_index=1
1: #10(): CLASS_TYPE_PARAMETER_BOUND, param_index=0, bound_index=1, location=[TYPE_ARGUMENT(0)]
2: #10(): CLASS_TYPE_PARAMETER_BOUND, param_index=0, bound_index=1, location=[TYPE_ARGUMENT(0), WILDCARD, TYPE_ARGUMENT(0)]
3: #10(): CLASS_TYPE_PARAMETER_BOUND, param_index=0, bound_index=2
4: #10(): CLASS_TYPE_PARAMETER_BOUND, param_index=0, bound_index=2
5: #10(): CLASS_TYPE_PARAMETER_BOUND, param_index=0, bound_index=2
6: #10(): CLASS_TYPE_PARAMETER_BOUND, param_index=0, bound_index=3
班级签名的第二部分相交
@Whoopy Comparable<@Whoopy List<? super @Whoopy M>>
似乎所有的TypeParameter Annotations都指向一个位置,由
表示3: #10(): CLASS_TYPE_PARAMETER_BOUND, param_index=0, bound_index=2
4: #10(): CLASS_TYPE_PARAMETER_BOUND, param_index=0, bound_index=2
5: #10(): CLASS_TYPE_PARAMETER_BOUND, param_index=0, bound_index=2
我们可以看到班级签名的第一部分相交
@Whoopy Derpable<@Whoopy ? extends Comparable<@Whoopy M>>
保留由
指示的注释typeref / coordinate / path数据0: #10(): CLASS_TYPE_PARAMETER_BOUND, param_index=0, bound_index=1
1: #10(): CLASS_TYPE_PARAMETER_BOUND, param_index=0, bound_index=1, location=[TYPE_ARGUMENT(0)]
2: #10(): CLASS_TYPE_PARAMETER_BOUND, param_index=0, bound_index=1, location=[TYPE_ARGUMENT(0), WILDCARD, TYPE_ARGUMENT(0)]
是什么导致类签名的第二部分相交以丢失注释的内部位置?
答案 0 :(得分:0)
我发现这似乎是由任何编译器eclipse(MARS专门)使用的。 在使用javac编译之后,我得到以下javap输出:
0: #8(): CLASS_TYPE_PARAMETER_BOUND, param_index=0, bound_index=1
1: #8(): CLASS_TYPE_PARAMETER_BOUND, param_index=0, bound_index=1, location=[TYPE_ARGUMENT(0)]
2: #8(): CLASS_TYPE_PARAMETER_BOUND, param_index=0, bound_index=1, location=[TYPE_ARGUMENT(0), WILDCARD, TYPE_ARGUMENT(0)]
3: #8(): CLASS_TYPE_PARAMETER_BOUND, param_index=0, bound_index=2
4: #8(): CLASS_TYPE_PARAMETER_BOUND, param_index=0, bound_index=2, location=[TYPE_ARGUMENT(0)]
5: #8(): CLASS_TYPE_PARAMETER_BOUND, param_index=0, bound_index=2, location=[TYPE_ARGUMENT(0), TYPE_ARGUMENT(0), WILDCARD]
6: #8(): CLASS_TYPE_PARAMETER_BOUND, param_index=0, bound_index=3
忽略额外的东西Eclipse抛入常量池(因此#8(来自javac版本)而不是#10(来自eclipse版本))我们现在可以看到相交的第2部分现在具有所有的坐标数据用javac编译时。
如果有人知道eclipse编译器配置中的任何内容可能导致它擦除位置数据(即一些奇怪的优化形式)让我知道,否则我会将此报告为错误。