为什么不加-keepattributes Signature,混淆后也能正确获取到泛型的类型,如下面的注释部分?
来源:3-5 Java 泛型的实现机制是怎样的?

慕尼黑5552265
2020-11-22
public abstract class GenericClass<T> {
Class<T> type;
public GenericClass() {
this.type = (Class<T>) getClass();
}
public List<Map<T, T>> getValue() {
return null;
}
}
private void getGenericsArguments() {
// 匿名内部类
GenericClass<String> genericClass = new GenericClass<String>() {
@Override
public List<Map<String, String>> getValue() {
return null;
}
};
ParameterizedType superType = (ParameterizedType) genericClass.getClass().getGenericSuperclass();
for (Type actualTypeArgument : superType.getActualTypeArguments()) {
System.out.println(TAG + " Superclass + actualTypeArgument: " + actualTypeArgument);
// GenericTest Superclass + actualTypeArgument: class java.lang.String
}
try {
ParameterizedType methodType = (ParameterizedType) genericClass.getClass().getMethod("getValue").getGenericReturnType();
for (Type actualTypeArgument : methodType.getActualTypeArguments()) {
System.out.println(TAG + " Method + actualTypeArgument: " + actualTypeArgument);
// GenericTest Method + actualTypeArgument: java.util.Map<java.lang.String, java.lang.String>
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
写回答
1回答
-
那应该是其他的混淆选项包含了keep attributes。
你可以找个class阅读器打开混淆后的class文件,看下,应该是泛型信息没有被混淆掉。
012020-11-23
相似问题