2014-02-08 89 views
1

我想測試MyType<int>類型的字段是否爲MyType<?>子類型的字段。 如果該字段的類型爲MyType<?>,那麼我將使用getActualTypeArgumentsParameterizedType正確實例化它。Java泛型:如何測試字段類型是否是泛型類型的規範

但我不能做測試:

if((field.getType instanceof MyType<?>)) 

...不會編譯,讓我:

Incompatible conditional operand types Class<capture#3-of ?> and myType<?> 

myType是我創建了一個泛型類。 該字段是使用反射從類中獲取的字段(java.lang.reflect.Field的實例,它公開了getType方法)。

任何一個知道如何?

+1

你能更具體一點嗎? –

+0

現在怎麼樣?我不是英國人,所以我正在盡力解釋 – Hichamov

+0

您需要先告訴我們'MyType'是什麼? 'field'是什麼,'getType'在哪裏?它給你什麼?這個問題缺少太多的信息。就目前而言,這是無法迴避的。 –

回答

0

Field#getType()方法返回一個Class<?>對象,表示該字段類型的Class實例。在這種情況下,你會得到一個Class<MyType>。當然,這不可能是MyType<?>的一個實例。這是Class的一個實例。

如果你想看看如果字段是MyType<?>型或它的子類型,那麼你需要從Class對象得到一個實例:

if (field.getType().newInstance() instanceof MyType<?>) { 
    System.out.println("Field is of type MyType<?>"); 
} 

還可以使用Class#isAssignableFrom()方法這個樣子做:

if (MyType.class.isAssignableFrom(field.getType()) { 
    System.out.println("Field is of type MyType<?>"); 
} 
+0

看起來不錯,但不是很漂亮!我希望避免在任何地方創建實例。謝謝 ! – Hichamov

+0

@Hichamov我不認爲這是可能的。你必須創建一個實例來檢查實例,因爲你不能在'Class '中使用'instanceof'。 –

+0

好的非常感謝,我讓這個問題unanswerd希望如果有人會給另一個想法(盒子外的東西),但一段時間後,我會標記你作爲不負責任的建議 – Hichamov