我不想通过泛型破坏多态性。但是我的短暂思想迫使施法。当我不这样做的时候,eclipse将对等类方法视为对象类。谁有好的解决方案?问题出在ArraySet Class的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>();
}
(...)
}
后记:我正在学习英语。所以,谢谢你指出。
答案 0 :(得分:0)
我不想通过泛型来破坏多态性。
你不破坏多态性。施法将打破使用泛型的全部意义。
下面:
if(((Star)this._elements[i]).equals(anElement))
您不需要将this._elements[i]
投射到Star
。只需直接在equals
上致电this._elements[i]
:
if(this._elements[i].equals(anElement))
日食视为对象类的等同方法
不,不。执行this._elements[i].equals(anElement)
时,在运行时,this._elements[i]
的类型将被计算出来,它将调用equals
方法的任何类型,而不是Object
。基本上,即使您没有投放,也会调用Star
equals
方法。