[英]How to use override method in generic class in JAVA
我不想用泛型破壞多態性。 但是我的想法很短,迫使鑄造。 當我不這樣做時,日食將Object類視為equals方法。 任何人都有好的解決方案?? 問題出在ArraySet類的if語句中。 祝好運。
public class Star {
(...)
// Public Method
@Override
public boolean equals(Object anObject) { (...) }
}
public class ArraySet<E> {
// Instance Variables
private E[] _elements;
(...)
// Constructors
@SuppressWarnings("unchecked")
public ArraySet() {
this._size = 0;
this._maxSize = ArraySet.DEFAULT_MAX_SIZE;
this._elements = (E[])new Object[this._maxSize];
}
(...)
**if(((Star)this._elements[i]).equals(anElement))**
(...)
}
public class AppController {
// Instance Variables
private AppView _appView;
private ArraySet<Star> _starCollector;
// Constructor
public AppController() {
this._appView = new AppView();
this._starCollector = new ArraySet<Star>();
}
(...)
}
后記:我正在學習英語。 因此,感謝您的指出。
我不想用泛型破壞多態性。
您不會破壞多態性。 強制轉換將破壞使用泛型的全部目的。
這里:
if(((Star)this._elements[i]).equals(anElement))
您無需將this._elements[i]
為Star
。 只需在this._elements[i]
上直接調用equals
:
if(this._elements[i].equals(anElement))
eclipse視為Object類的equals方法
不,不是的。 當您執行this._elements[i].equals(anElement)
時,將在運行時確定this._elements[i]
的類型, this._elements[i]
以任何類型(而不是Object
調用equals
方法。 基本上,即使不進行強制轉換,也會調用Star
的equals
方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.