webForumDet fria alternativet

överlagring av == operator

5 svar · 440 visningar · startad av kallepocket

kallepocketMedlem sedan sep. 200182 inlägg
#1

Går det att överlagra operatorer i Java och isåfall hur?

Vad jag vill göra är att jag har objekt av typen User, och vill bestämma hur Java gör för att jämföra två users...

exv user1 == user2 ska ge true om de har samma användarnamn, oavsett om det är exakt samma objekt eller inte..

detta för att jag ska kunna använda inbyggda funktioner för att t.ex. se ifall ett objekt finns i en lista...

/anders

PhorpherMedlem sedan feb. 20002 300 inlägg
#2

Nej, det finns inte operatoröverlagring i Java.

Däremot kan du i ditt fall med fördel implementera ett Interface kallat Comparable som gör det du vill. :i

kallepocketMedlem sedan sep. 200182 inlägg
#3

Eh, okej. Jag kollade Java API litegrann för att se vad det var för något, men jag tror inte jag förstod så mycket av hur det skulle användas direkt.

Är det alltså min klass User som ska implementera interfacet Comparable? Och vad måste jag göra sen för att det ska ske på rätt sätt?

/Anders

beikerMedlem sedan juli 200194 inlägg
#4

Du kan ju "over-rajda" metoden equals(Object obj) från Object och där bestämma hur dom ska jämföras.

PhorpherMedlem sedan feb. 20002 300 inlägg
#5

Låt User implementera Comparable. Comparable innehåller en metod kallad compareTo(Object o).

Du implementerar själv denna metoden i klassen User.

Metoden fungerar som så att den tar ett objekt av klassen User som argument och jämför en eller flera av detta objekts värden med "sig själv."

User usr = new User("Greger");
User usr2 = new User("Arne");

if(usr.compareTo(usr2) == 1)
  // Inte samma namn...

Det finns sedan en mängd olika metoder i listor m.m som använder denna compareTo-metod för att göra jämförelser.

Du kan t.ex. sortera en lista eller leta efter "dubletter"...

Red:

beiker skrev:

Du kan ju "over-rajda" metoden equals(Object obj) från Object och där bestämma hur dom ska jämföras.

Ja, det är nog mer rätt i det här läget när jag tänker efter. :bire

kallepocketMedlem sedan sep. 200182 inlägg
#6

Ah,

så listan använder sig av equals() för att se ifall det är samma objekt? för i såna fall fungerar det ju bra.. ;)

Annars kan jag testa lite olika saker, jag har lite uppslag nu iaf.
Tack!

/Anders

128 ms totalt · 3 externa anrop · v20260731065814-full.0e50b1ef
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)