equals überladen

Status
Nicht offen für weitere Antworten.
S

Samuel

Gast
Hallo, ich hab Probleme equals zu überladen, eine Klasse Spieler braucht eine equals mit Object, wo sie Spieler mit Spielern vergleich und eine equals, wo die einen übergebenen String mit der gegeben Klasse vergleich, folgendes aber, geht nicht mal annährend:

Code:
public boolean equals(Object obj){
		return super.equals(obj);
	}
	
	public boolean equals(String name){
		return this.name.equals(name);
	}

Aber der Debugger zeigt mir auch bei

Code:
etwas.equals("Horst)
, dass Object zuerst aufgerufen wird, was er aber nicht soll.
 

byte

Top Contributor
Das Problem ist, dass ein String auch ein Object ist. Die Variante 2 entspricht aber auch nicht dem, wozu die equals Methode eigentlich gedacht ist. Ich würde die Methode einfach anders nennen.
 
S

Samuel

Gast
Ah, ok, auch wahr, mach ich.

Aber ich hab ein anderes, viel verwirrenderes Problem, ich habe eine Klasse Spieler und eine Klasse SpielerMenge,
SpielerMenge sieht so aus:
public class SpielerMenge<Spieler> extends Vector<Spieler>

Spieler hat eine Methode gibName(), nur hab ich hier ein Problem:
Code:
public class SpielerMenge<Spieler> extends Vector<Spieler> {
 public void methode(){
//Gibt erstes Element aus der Menge aus, Eclipse zeigt auch rückabe ist Spieler (Generics funktionieren) 
this.get(0);
 
//aber warum gibt es kein
this.get(0).gibName();
}
}
Obwohl Spieler diese Methode als public hat, komme ich nicht an diese ran.
Woran liegt es?
 
B

Beni

Gast
Indem du "SpielerMenge<Spieler>" schreibt, benutzt du "Spieler" als Generic, und "Spieler" verhält sich wie ein Object. Schreib mal:

Code:
public class SpielerMenge extends Vector<Spieler>{
  ...
}
 
S

Samuel

Gast
Was genau meinst du? Ich teste es morgen, aber was heißt Spieler als generic benutzen? Ich dachte eben dies erwirkt, dass SpielMenge den Typ Spieler benutzt
 
B

Beni

Gast
In diesem Spiel gibt es zuviel Spieler...

Deine Version ist zu 100% identisch mit:
Code:
public class SpielerMenge<T> extends Vector<T>{
  ...
}

Weil das T hinter SpielerMenge steht, ist T ein Generic. Anstelle von T darf man alles möglich einsetzen, auch "Spieler"; der Effekt bleibt derselbe.
 
S

Samuel

Gast
Jetzt sagst du, dass da alles stehen darf und vorher sagtest du, ich soll das nach SpielerMenge weglassen.
Das verwirrt mich.


(Es scheint zu funktionieren, dafür danke ich, ich versuche es jetzt nur noch zu verstehen)
 
B

Beni

Gast
Ich versuche dir zu erklären, wieso deine Version nicht funktioniert. Das kann ich dir aber nur an deiner Version, nicht an meiner erklären :wink:

Aber wie ich das erklären soll... keine Ahnung. Guck dir mal das Tutorial von Sun an, da steht einiges drin.
 
S

Samuel

Gast
Ich habe mir das gerade durchgeguckt, die erzeugen doch auch Klasse in der Art: public class SpielerMenge<Spieler> extends Vector<Spieler> { wo zwei Generics drin sind, warum geht das denn?
 

norman

Top Contributor
davon abgesehen: muss es wirklich eine eigene klasse für die spielermenge sein?

tuts nicht vielmehr sowas wie
Code:
Vector<Spieler> spielerMenge = new Vector<Spieler>();
???:L
 
B

bygones

Gast
Samuel hat gesagt.:
Ich habe mir das gerade durchgeguckt, die erzeugen doch auch Klasse in der Art: public class SpielerMenge<Spieler> extends Vector<Spieler> { wo zwei Generics drin sind, warum geht das denn?
das in Klammern stehende ist eine Typvariable - deine Typvariable in dieser Form hat nichts mit der Klasse "Spieler" zu tun.

z.b. gehen folgende Codes ohne probleme
Code:
public class Spieler<IchMagNicht> extends Vector<IchMagNicht>{

}

public class Spieler<Foobar> extends Vector<Foobar>{

}
die in Klammer stehenden Worter sind einfach Bezeichner, nicht eine spezielle Klasse.

Anders ist es im Fall von
Code:
public class Spieler extends Vector<IchMagNicht>{

}
hier ist deine Klasse eine konkrete Erweiterung von Vector<IchMagNicht> - sie selbst ist nicht generisch, du definierst somit keine Typvariable, sondern verweist auf eine konkrete Klasse "IchMagNicht"....

klarer?
 
S

Samuel

Gast
Ja, mir ist es jetzt klarer, es hat mich nur gewundert, dass ausserhalb der Spieler Klasse alle geklappt hat, auch mit SpielerMenge.get(0). MethodedesSpieles, aber innen nicht
 

Leroy42

Top Contributor
Code:
public class Spieler<IchMagNicht> extends Vector<IchMagNicht> {...}
irgendwo später im Code hast du stehen
Code:
Vector<Spieler> spielerMenge = new Vector<Spieler>();
Damit hast du ja schließlich das was du haben wolltest.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
mihe7 equals und instanceOf pattern matching Allgemeine Java-Themen 9
P Strings: equals vs == Allgemeine Java-Themen 47
F Methoden hashCode() & equals() Allgemeine Java-Themen 13
J Equals Mock Objekte Allgemeine Java-Themen 5
J Mockito - Objekte miteinander vergleichen (equals) Allgemeine Java-Themen 6
J Probleme mit CodeCoverage und Lombok Equals Allgemeine Java-Themen 1
S equals-Methode bestimmer Klassen abfangen Allgemeine Java-Themen 2
T Zwei Wortendungen vergleichen ohne .equals Allgemeine Java-Themen 10
C Object.equals() liefert falschen Wert? Allgemeine Java-Themen 14
T Collections TreeSet.contains ruft nicht .equals? Allgemeine Java-Themen 4
H Problem mit der .equals()-Methode Allgemeine Java-Themen 2
T Compiler-Fehler not equals Allgemeine Java-Themen 22
I HashMap key wird nicht erkannt trotz überschriebener equals/hashCode Methode Allgemeine Java-Themen 6
V ArrayList vergleichen mit .equals? Allgemeine Java-Themen 13
A mit .equals Array befüllen schlägt teilweise fehl Allgemeine Java-Themen 3
G Probleme mit equals Allgemeine Java-Themen 3
R Merkwürdiges Verhalten der equals Method Allgemeine Java-Themen 4
tuttle64 equals() und == Allgemeine Java-Themen 4
B Probleme mit eigener equals Methode Allgemeine Java-Themen 18
H double dispatch und equals(Object) Allgemeine Java-Themen 6
S equals - Identität ändern bei Vererbung? Allgemeine Java-Themen 5
fastjack jUnit und Test von equals, hashCode, toString Allgemeine Java-Themen 11
K Collection.contains()/retainAll() mit Referenzgleichheit statt equals()? Allgemeine Java-Themen 2
J Best Practice für implementierung von equals(...) Allgemeine Java-Themen 7
M equals & compareTo Allgemeine Java-Themen 15
M Warum Strings mit equals vergleichen... Allgemeine Java-Themen 6
T Wie intelligent ist dieses überschriebene .equals() ? Allgemeine Java-Themen 13
G Objektvergleich mit equals Allgemeine Java-Themen 5
vogella Überschreiben von equals und hashcode für Collection Allgemeine Java-Themen 7
M String#equals(), Probleme mit großen Strings? Allgemeine Java-Themen 4
André Uhres equals überschreiben Allgemeine Java-Themen 31
F Problem: mehrere Interfaces definieren equals() neu Allgemeine Java-Themen 24
A equals() macht nicht, was es soll Allgemeine Java-Themen 4
B Equals Methode überschreiben mit Array Allgemeine Java-Themen 2
M equals() != compareTo() ? Allgemeine Java-Themen 3
M String mit equals() vergleichen - Frage Allgemeine Java-Themen 3
S Mal was allgemeines zu equals() Allgemeine Java-Themen 12
J Arrays vergleichen mit equals Allgemeine Java-Themen 8
E Klassen Enum überladen od. austauschbar machen? Allgemeine Java-Themen 2
D Methode überladen Allgemeine Java-Themen 4
sylo toString() Methode eines Interfaces überladen. Allgemeine Java-Themen 17
S Interface Klasse überladen. Allgemeine Java-Themen 2
J Hilfe bei Operatoren überladen Allgemeine Java-Themen 7
P Operatoren überladen wie in C++ Allgemeine Java-Themen 3
S überladen ... Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben