2015-11-05 54 views
1

我根本不是Java專家,所以我很抱歉如果我做的事情非常愚蠢。我試圖用這個爲什麼不檢測我的參數化類的類型?

public class TestClass<T> { 
    public T testMethod() { 
     Type type = getClass().getGenericSuperclass(); 
     ParameterizedType paramType = (ParameterizedType) type; 
     Class<T> aClass = (Class<T>) paramType.getActualTypeArguments()[0]; 
    } 
} 

我得到這個運行時錯誤

讓我的泛型參數的類型

java.lang.Class中不能被強制轉換爲java.lang.reflect.ParameterizedType

怎麼了?

回答

1

您誤解了方法getGenericSuperclass()的作用。它是關於超類的泛型,而不是類本身。

下面是它的用法的一個例子。

public class TestClass<T> { 

    // The generic type of the super class of SubClass is TestClass<String> 
    public static class SubClass extends TestClass<String> { 
     public void testMethod() { 
      Type type = getClass().getGenericSuperclass(); 
      System.out.println(type); 
     }; 
    } 

    public static void main(String[] args) { 
     new SubClass().testMethod(); 
    } 
} 

這個程序打印:

TestClass<java.lang.String> 

你似乎有什麼要努力做(在運行時獲取泛型類型的實例)是Java實際上不可能的,因爲類型擦除。

相關問題