如何在JAVA中的泛型类中使用override方法

时间:2017-04-04 07:23:08

标签: java generics override equals

我不想通过泛型破坏多态性。但是我的短暂思想迫使施法。当我不这样做的时候,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>();
    }
    (...)
}
后记:我正在学习英语。所以,谢谢你指出。

1 个答案:

答案 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方法。