[英]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.