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で親類を継承する場合は親タイプを指定すればいいです。