[英]Casting with type parameters in java
說我有這樣一個類:
class ParameterizedType<T>{
public boolean equals(Object o){
if (ParameterizedType<T>.class.isInstance(o)){
ParameterizedType<T> other = (ParameterizedType<T>) o;
return this.toString() == other.toString();
}
return false;
}
}
在這種方法中,我可以從eclipse中得到兩個不同的警告。
ParameterizedType<T>.class
在語法上不正確
(ParameterizedType<T>)
o是未選中的強制轉換
怎么可以解決這個問題呢?
ParameterizedType<T>.class
在語法上不正確 這樣做的原因是,使用.class
你在運行時引用.class
值,因為Generics是Java的編譯時功能,類型參數被刪除並被實際類型替換,所以語句沒有'在運行時有意義, <T>
完全是多余的。
請注意,同樣的規則適用於instanceof
運算符(即你不能這樣做if (something instanceof SomeGenericClass<T>)
)
(ParameterizedType<T>)
o是未選中的強制轉換 除非向下轉換,否則無法將Object
與ParameterizedType
進行比較。 IDE正確地建議取消選中轉換,但為了比較實例,您必須在某個時候進行轉發。 在這種情況下,在方法上方添加@SuppressWarnings("unchecked")
就可以了。
另請注意, Java中的字符串不應與==
進行比較
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.