簡體   English   中英

如何在JAVA中的泛型類中使用重寫方法

[英]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方法。 基本上,即使不進行強制轉換,也會調用Starequals方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM