【发布时间】:2016-04-02 22:54:34
【问题描述】:
我目前遇到了一个奇怪的情况,其中一些 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>>
保留其注释类型参考/坐标/路径数据,由
指示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)]
是什么导致类签名的第二部分 intersect 丢失注释的内部位置?
【问题讨论】:
标签: java reverse-engineering bytecode