Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
getGenericType()返回java.lang.Class的实例,而不是类型_Java_Android_Generics_Reflection_Proguard - Fatal编程技术网

getGenericType()返回java.lang.Class的实例,而不是类型

getGenericType()返回java.lang.Class的实例,而不是类型,java,android,generics,reflection,proguard,Java,Android,Generics,Reflection,Proguard,我对proguard和一些反思的东西有意见 Myclass.java package not.obfuscated class MyClass { public List<InnerClass> childs; } package not.obfuscated class InnerClass { //.somestuff } 在proguard.cfg中,我有: -keep class not.obfuscated.** {*;} 在另一个类中,我设法获取My

我对proguard和一些反思的东西有意见

Myclass.java

package not.obfuscated
class MyClass {
    public List<InnerClass> childs;
}
package not.obfuscated
class InnerClass {
    //.somestuff
}
在proguard.cfg中,我有:

-keep class not.obfuscated.** {*;}
在另一个类中,我设法获取MyClass.childs字段的“Field”实例,然后尝试获取getGenericType以确定哪个类位于列表括号内(

出于日志记录的目的,我编写了以下Log.d代码(field是表示MyClass.childs的字段的实例):

输出如下(第2行):

如您所见,字段.getGenericType.toString()可能是正确的,但当我请求该类时,它返回java.lang.class。事实上,之后我会说几句话:

ParameterizedType listType = (ParameterizedType) field.getGenericType();
我收到一个ClassCastException:

java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType

我坚信这是由于proguard,但据我所知,proguard已经排除了not.obfuscated包中的所有类。作为最后一次尝试,我还插入了一行-keep class java.lang.List(显然没有发生任何事情)。

默认情况下,Proguard会删除一些类型信息:

添加以下行可以解决此问题:

-keepattributes Signature
可能整个魔线都会起作用,即:

-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod 

-keepattributes Annotation-keepattributes SignatureHello,我已经在我的proguard顶部添加了keepattributes,但它不起作用-keepattributes Signature我必须提到我还有另一个-keepattributes属性。嘿,可能它切断了关于内部类的信息-我已经更新了一整行-希望这会有所帮助。@AndreyChaschev you save my life:)。非常感谢。修复了我的改装和rxjava项目。干杯
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod