[英]How to do instanceof and typecast with a generic type
在下面的代碼中,我有兩個方法as_A
和as_B
,它們基本上做同樣的事情,但具有不同的類型 A 和 B。我如何將這兩個方法合並為一個參數化方法? as_T
中顯示的方法不起作用,因為泛型類型在運行時被擦除。
class A {}
class B extends A {}
class C extends A {}
B as_B(A a) {
if (a instanceof B)
return (B) a;
else
return null;
}
C as_C(A a) {
if (a instanceof C)
return (C) a;
else
return null;
}
<T extends A> T as_T(A a) {
if (a instanceof T) // compile error because of type erasure
return (T) a;
else
return null;
}
正如您自己所說, T
被擦除,編譯器會阻止涉及泛型類型或類型參數的instanceof
檢查。
根據您使用as_T
方法的方式,您可以使用對應於T
的類實例調用它,而不會出現編譯時警告:
<T extends A> T as_T(A a, Class<T> type) {
if (type.isInstance(a))
return type.cast(a);
else
return null;
}
因此,當您需要給定的子類類型時,您可以使用以下方式調用它:
C c = as_T(a, C.class);
B b = as_T(a, B.class);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.