sun.reflects.genersics.reflects.TypeVarable Impl cannot be cast to java.lang.lass異…
4168 ワード
http://blog.csdn.net/adam_wzs/articale/detail/25915203
下に修正後の正常運行コードを貼り付けますので、皆さんに助けてもらいたいです。
package com.wzs;
import java.lang.reflect.ParameterizedType;
public class T1<T> {
private Class classt;
public T1() {
ParameterizedType type = (ParameterizedType) this.getClass().getGenericSuperclass();
this.classt = (Class) type.getActualTypeArguments()[0];
System.out.println(this.classt);
}
}
package com.wzs;
public class T2<T> extends T1<T> {
public static void main(String[] args) {
T2 t = new T2();
}
}
Exception in thread "main" java.lang.ClassCastException: sun.reflect.generics.reflectiveObjects.TypeVariableImpl cannot be cast to java.lang.Class
at com.wzs.T1.<init>(T1.java:10)
at com.wzs.T2.<init>(T2.java:3)
at com.wzs.T2.main(T2.java:5)
T 1は父類、T 2はサブクラス、T 2はT 1を継承した後、エラータイプの変換異常を報告しました。ネットでN久資料を探して解決方法を見つけました。問題の原因はまだよく分かりませんが、どう解決しましたか?下に修正後の正常運行コードを貼り付けますので、皆さんに助けてもらいたいです。
package com.wzs;
import java.lang.reflect.ParameterizedType;
public class T1<T> {
private Class classt;
public T1() {
ParameterizedType type = (ParameterizedType) this.getClass().getGenericSuperclass();
this.classt = (Class) type.getActualTypeArguments()[0];
System.out.println(this.classt);
}
}
package com.wzs;
public class T2 extends T1<Integer> {
public static void main(String[] args) {
T2 t = new T2();
}
}
class java.lang.Integer
T 1親類はコードを修正せず、T 2で親類を継承する場合は親タイプを指定すればいいです。