2015-09-24 57 views
0

檢查泛型類型需要在Java中我如何在泛型方法

class Program 
    { 
     static void Main(string[] args) 
     { 
      Method<String>(); 
     } 

     static void Method<T>() 
     { 
      Type typeT = typeof(T); 
      Type typeString = typeof(String); 
      if (typeT == typeString) 
      { 
       Console.WriteLine("Is String"); 
      } 
     } 
    } 
} 

像這樣(C#示例)我有泛型方法,需要檢查類型T的方法。

protected <T> MyClass<T> myMethod(MyClass<T> myObj){ 
    // if T is string do ..., else do ... 
} 
+1

建議解決這個你不能,基本上是這樣。搜索「type erasure」 –

+2

您可以使用'if(myObj instanceof String)'。 – Titus

回答

3

你需要Class<T>類型的附加參數,因爲類型擦除後的通用信息將被刪除。然而,有一個Class<T>將允許您訪問(元)有關T在運行時:

protected <T> MyClass<T> myMethod(MyClass<T> myObj, Class<T> clazz) { 
    if (clazz == String.class) { ... } 
} 
1

因爲T爲未定義/在運行時沒有已知的你不能這樣做typeof(T);

在Java中,泛型不會存在於運行時,它適用於被稱爲擦除的概念。

Docs:在類型擦除過程中,Java編譯器將刪除所有類型參數和替換每個具有其第一個綁定如果類型參數是有界的,或者如果對象類型參數是無界的。

您可以通過使用instanceof操作的參數

myObj instanceof String

或也回答@kocko