importieren Sie java.util. *;
%Vor%Fehler: Namenskonflikt: Die Methode add (Object) vom Typ test2 hat die gleiche Löschung wie add (E) vom Typ HashSet, überschreibt diese jedoch nicht
Ich weiß nicht, was ist das Konzept hinter dem obigen Fehler kann jemand vorschlagen, wo ich dieses Konzept studieren kann?
Das hier arbeitende Konzept heißt type löschen . HashSet
definiert eine Methode add(T)
und Sie definieren eine Methode add(Object)
. Auf einen Blick könnte man meinen, das sei in Ordnung; dass Ihre Methode nur add
überlädt. Das Löschen von T
ist jedoch Object
und so haben die beiden die gleiche gelöschte Signatur.
Nun, das wäre in Ordnung, wenn Ihre Methode die Methode von HashSet
korrekt überschreiben würde. Dazu sollten Sie add(Integer)
und nicht add(Object)
verwenden. Sie überschreiben die übergeordnete Methode nicht ordnungsgemäß. Stattdessen wird sie als Konflikt gemeldet, da eine Klasse nicht zwei Methoden mit derselben Signatur bereitstellen kann.
Ihr Abc
Beispiel folgt derselben Argumentation. Die beiden Methoden, die Sie deklariert haben, haben dieselbe gelöschte Signatur, so dass sie kollidieren.
Angelika Langer Generics FAQ
Dieser Code funktioniert gut. In JLS: Der Begriff der Subsignatur soll eine Beziehung zwischen zwei Methoden ausdrücken, deren Signaturen nicht identisch sind, in denen jedoch die andere überschrieben werden kann. Insbesondere ermöglicht es eine Methode, deren Signatur keine generischen Typen verwendet, um generierte Versionen dieser Methode zu überschreiben. Dies ist wichtig, damit Bibliotheksdesigner Methoden unabhängig von Clients, die Unterklassen oder Subschnittstellen der Bibliothek definieren, frei generieren können.
Haben Sie versucht, Integer anstelle von Object obj, d. h.
zu verwenden public boolean add(Integer i)
{ //compiler error
return true;
}
Das Problem besteht darin, dass Sie beim Erweitern von Hashset Integer-Hashset und nicht die generische Form erweitern. In der Unterklasse muss Ihre add-Methode also der Signatur der Superklassenmethode entsprechen, die
istpublic boolean add (Ganzzahl i) {}
Wenn Sie von einer generischen Hashset-Implementierung ausschließen möchten, versuchen Sie, mit
zu erweitern %Vor%}
Dann sollte Ihre Add-Methode mit Object funktionieren.