Ich möchte Polymorphismus nicht durch Generikum beschädigen. Aber mein kurzer Gedanke zwingt zum Casting. Als ich das nicht tat, betrachtete die Eclipse eine Equals-Methode der Objektklasse. Hat jemand eine gute Lösung?? Das Problem liegt in der if-Anweisung der ArraySet-Klasse. Viel Glück.
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>();
}
(...)
}
Nachtrag: Ich studiere Englisch. Also danke für deinen Hinweis.
Ich möchte Polymorphismus nicht durch Generikum beschädigen.
Sie sind nicht zu beschädigen Polymorphismus. Casting wird den ganzen Sinn der Verwendung von Generika sprengen.
Hier:
if(((Star)this._elements[i]).equals(anElement))
Sie nicht gegossen müssen this._elements[i]
zu Star
. Rufen Sie einfach equals
direkt an unter this._elements[i]
:
if(this._elements[i].equals(anElement))
die Eclipse betrachtete eine Equals-Methode ab der Objektklasse
Nein, tut es nicht. Wenn Sie dies tun this._elements[i].equals(anElement)
, wird zur Laufzeit der Typ von ermittelt this._elements[i]
und die equals
Methode wird anstelle von , unabhängig vom Typ, aufgerufen Object
. Grundsätzlich Ihre Star
‚s equals
wird Methode aufgerufen werden , selbst wenn Sie nicht werfen es.
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen