如何在 JAVA 中的泛型 class 中使用覆盖方法
How to use override method in generic class in JAVA
我不想通过泛型破坏多态性。但我的简短想法迫使铸造。当我不这样做时,eclipse 认为对象 Class 的 equals 方法。谁有好的解决办法??问题出在 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>();
}
(...)
}
后记:我在学英语。所以谢谢你的指出。
I don't want to damage to polymorphism by generic.
你没有破坏多态性。转换将破坏使用泛型的全部意义。
这里:
if(((Star)this._elements[i]).equals(anElement))
您不需要将 this._elements[i]
转换为 Star
。直接在 this._elements[i]
:
上调用 equals
if(this._elements[i].equals(anElement))
the eclipse regarded a equals method as of Object Class
不,不是。当你执行 this._elements[i].equals(anElement)
时,在运行时,this._elements[i]
的类型将被计算出来,并且它将调用 equals
方法,而不是 Object
。基本上,即使您不转换它,您的 Star
的 equals
方法也会被调用。
我不想通过泛型破坏多态性。但我的简短想法迫使铸造。当我不这样做时,eclipse 认为对象 Class 的 equals 方法。谁有好的解决办法??问题出在 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>();
}
(...)
}
后记:我在学英语。所以谢谢你的指出。
I don't want to damage to polymorphism by generic.
你没有破坏多态性。转换将破坏使用泛型的全部意义。
这里:
if(((Star)this._elements[i]).equals(anElement))
您不需要将 this._elements[i]
转换为 Star
。直接在 this._elements[i]
:
equals
if(this._elements[i].equals(anElement))
the eclipse regarded a equals method as of Object Class
不,不是。当你执行 this._elements[i].equals(anElement)
时,在运行时,this._elements[i]
的类型将被计算出来,并且它将调用 equals
方法,而不是 Object
。基本上,即使您不转换它,您的 Star
的 equals
方法也会被调用。