簡體   English   中英

在java中使用類型參數進行轉換

[英]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中得到兩個不同的警告。

  1. ParameterizedType<T>.class在語法上不正確

  2. (ParameterizedType<T>) o是未選中的強制轉換

怎么可以解決這個問題呢?

  1. ParameterizedType<T>.class在語法上不正確

這樣做的原因是,使用.class你在運行時引用.class值,因為Generics是Java的編譯時功能,類型參數被刪除並被實際類型替換,所以語句沒有'在運行時有意義, <T>完全是多余的。

請注意,同樣的規則適用於instanceof運算符(即你不能這樣做if (something instanceof SomeGenericClass<T>)

  1. (ParameterizedType<T>) o是未選中的強制轉換

除非向下轉換,否則無法將ObjectParameterizedType進行比較。 IDE正確地建議取消選中轉換,但為了比較實例,您必須在某個時候進行轉發。 在這種情況下,在方法上方添加@SuppressWarnings("unchecked")就可以了。

另請注意, Java中的字符串不應與==進行比較

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM