如何在 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。基本上,即使您不转换它,您的 Starequals 方法也会被调用。