簡體   English   中英

未選中投射警告:將對象強制轉換為通用

[英]Unchecked Cast warning: cast Object to Generic

我正在嘗試使用genenerics實現DoublyLinkedList。 根據Java Docs ,remove()方法的參數必須是Object。

如果我嘗試將Object o轉換為T數據,我將收到警告:Unchecked Cast:'Java.lang.Object'to'T'。

public boolean remove(Object o) {
        T data = (T) o; // warning here
...
}

為了避免這種情況,我必須通過“@SuppressWarning(”Unchecked“)來抑制警告”

@SuppressWarnings("unchecked")
public boolean remove(Object o) {
        T data = (T) o;
...
}

我的理解是每個T都是一個對象,但不是每個對象都是T.這就是它顯示警告的原因。

但是,當我使用我的DoublyLinkedList類時,我100%確定Object參數是T,有沒有辦法避免警告或@suppresswarning是唯一的選擇?

如果我的假設不正確,將對象強制轉換為T的正確方法是什么? 謝謝。

避免@SuppressWarning的唯一方法是擁有一個包含元素類的字段:

public class DoublyLinkedList<T> ... {
    ...
    private final Class<T> elementClass;

    ...

    public DoublyLinkedList(Class<T> elementClass) {
        this.clazz = elementClass;
    }

    ...
    public boolean remove(Object o) {
        T data = elementClass.cast(o);
        ...
    }
    ...
}

正如Silvio和Andreas在評論中提到的那樣。

不需要將Object轉換為T,相反,我們只需要使用.equals()進行比較。

我最初的實現是使用==運算符來比較對象。 這是錯誤的,因為==用於比較引用而不是內容。

暫無
暫無

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

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