Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

override equals() i casting ?

[es] :: Java :: override equals() i casting ?

[ Pregleda: 4104 | Odgovora: 15 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

tiranin
Dorćol

Član broj: 37185
Poruke: 245
..njuel-bg.customer.sbb.co.yu.



Profil

icon override equals() i casting ?14.10.2005. u 11:24 - pre 204 meseci
U nekoj klasi imam
Code:

MojaKlasa {
      public void equals(MojaKlasa mk){
.
.
.
}
gde vrsim poredjenja jedne instance MojaKlasa sa drugom instancom iste klase. Nista narocito, radio sam to zilion puta.
U nekoj drugoj klasi, imam java.util.Vector i u njega sam smestio instance klase MojaKlasa.
Zatim uradim npr.

Code:
...
MojaKlasa mk = (MojaKlasa) enm.nextElement();
if(mk.equals(drugaInstanca)){...}

i dogadja mi se da umesto da se izvrsava metoda equals(MojaKlasa mk) koju sam ja napravio, izvrsava se (cini mi se) metoda equals uz klase Object, i naravno vraca mi false, jer nisu u pitanje iste instance.
Tek nedavno sam presao na 1.5, nisam nikad kodirao generic-e, pa ne znam da li moram(ne da li je korisno, vec da li je obavezno), ako je uopste to razlog ovog problema.
Kada metodu equals(...) preimenujem u npr. jednako(...), sve radi OK.
Ima li negde nesto objavljeno o ovome, guglao sam ali bezuspesno ?
 
Odgovor na temu

Damjan S. Vujnovic
London, UK

Član broj: 30444
Poruke: 81
*.ceetel.co.yu.

Jabber: damjan@elitesecurity.org
ICQ: 68189289
Sajt: www.javasvet.net


Profil

icon Re: override equals() i casting ?14.10.2005. u 11:33 - pre 204 meseci
A da ti malo prelistas neku Java 101 knjizicu i vidis kako je tacno potpis metoda equals (tip parametra i tip rezultata)?

http://java.sun.com/j2se/1.5.0...t.html#equals(java.lang.Object)

DSV

[Ovu poruku je menjao Damjan S. Vujnovic dana 14.10.2005. u 12:34 GMT+1]
I love the smell of copyright violations in the morning. Smells like... freedom!
 
Odgovor na temu

tiranin
Dorćol

Član broj: 37185
Poruke: 245
..njuel-bg.customer.sbb.co.yu.



Profil

icon Re: override equals() i casting ?14.10.2005. u 11:38 - pre 204 meseci
Greska u kucanju. Naravno da mi je metoda
Code:
public boolean equals(MojaKlasa mk){

a ne
Code:
public void equals(MojaKlasa mk){

kako sam pogresno ukucao u prvom postu. To se i moglo pretpostaviti jer sam rekao da mi metoda jednako() radi ispravno, a kada se zove equals() ne radi. A podrazumeva se valjda da metoda koja nesto testira vraca boolean.
 
Odgovor na temu

Damjan S. Vujnovic
London, UK

Član broj: 30444
Poruke: 81
*.ceetel.co.yu.

Jabber: damjan@elitesecurity.org
ICQ: 68189289
Sajt: www.javasvet.net


Profil

icon Re: override equals() i casting ?14.10.2005. u 11:40 - pre 204 meseci
Ajmo jos jednom, sad za one sa jeftinijim ulaznicama:

public boolean equals(Object obj);

DSV
I love the smell of copyright violations in the morning. Smells like... freedom!
 
Odgovor na temu

logotet
Beograd

Član broj: 49849
Poruke: 42
..njuel-bg.customer.sbb.co.yu.

Sajt: www.logotet.com


Profil

icon Re: override equals() i casting ?14.10.2005. u 11:46 - pre 204 meseci
Idi na
www.javapractices.com/Topic17.cjp
ili
ovo
Tu ces naci objasnjenje da je uz override metode equals(), obavezno uraditi i override metode
public int hashCode()

Verujem da je to razlog.
 
Odgovor na temu

tiranin
Dorćol

Član broj: 37185
Poruke: 245
..njuel-bg.customer.sbb.co.yu.



Profil

icon Re: override equals() i casting ?14.10.2005. u 11:53 - pre 204 meseci
Citat:
Damjan S. Vujnovic: Ajmo jos jednom, sad za one sa jeftinijim ulaznicama:

public boolean equals(Object obj);

DSV

Gresku sto sam ukucao void umesto boolean prihvatam, ali za ovo me bas zasmejavas :))
 
Odgovor na temu

smrz
promenio bi

Član broj: 61190
Poruke: 98
82.117.193.*

Sajt: 70.84.131.212/data/toons/..


Profil

icon Re: override equals() i casting ?14.10.2005. u 12:02 - pre 204 meseci
Citat:
tiranin: Gresku sto sam ukucao void umesto boolean prihvatam, ali za ovo me bas zasmejavas :))


evo mi se svi smejemo zajedno sa tobom, ali - tebi.
 
Odgovor na temu

kurt.hectic
Kurt Hectic

Član broj: 66049
Poruke: 25
*.etf.bg.ac.yu.



Profil

icon Re: override equals() i casting ?14.10.2005. u 13:49 - pre 204 meseci
lepo ti covek kaze da potpis funkcije treba da ti bude public boolean equals(Object o)
a ne public boolean equals(MojaKlasa o) ali tebi ne vredi govoriti, izgleda...
 
Odgovor na temu

me-tuzalem
mensur tuzalemovic
novi pazar

Član broj: 25730
Poruke: 116
..njuel-bg.customer.sbb.co.yu.



Profil

icon Re: override equals() i casting ?14.10.2005. u 14:03 - pre 204 meseci
Grešku imaš vjerovatno u nekom djelu koda koji nisi ovdje prikazao. Nema razloga da ti se izvršava Object.equals namjesto tvoje TvojaKlasa.equals, s tim što se u ovome što si prikazao ne može govoriti o overridingu več o overloadu.
Naime, kada želiš promijeniti ponašanje metode iz nasleđene klase onda moraš u potpunosti ispoštovati potpis iz "starije" klase.
Ako to ne uradiš , već samo ime metode ostane isto, a argumenti su različiti, makar bili i potklase, što je u tvom slučaju, onda je u pitanju overloading.
Ti si u pravu što očekuješ da se izvršava metoda iz tvoje klase, ako se ona izvršava kada je nazoveš "jednako", a ne uzvršava se kada je zoveš "equals" , vjerujem da imaš neki slabouočljivi bag u kodu.
Što se tiče onog komentara sa potrebom da imaš hashCode() , to je važno samo ako radiš sa određenim kolekcijama.

BTW. Nema potrebe za ciničnim prepucavanjima, ni s tvoje strane ni sa strane onih koji misle drugačije. Moderator bi mogao malo da se pozabavi ovim.
 
Odgovor na temu

x VITA x
Beograd

Član broj: 41277
Poruke: 57
*.sbb.co.yu.



Profil

icon Re: override equals() i casting ?14.10.2005. u 15:54 - pre 204 meseci
ja sam se slicno jednom zeznuo za windowClosing metodu..tacnije nisam ima window event argument.. uf koliko je trebalo da provalim :)
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. - Dennis Ritchie
 
Odgovor na temu

Toxter
NS

Član broj: 39393
Poruke: 317
*.ftn.ns.ac.yu.



+6 Profil

icon Re: override equals() i casting ?14.10.2005. u 20:59 - pre 204 meseci
Citat:
me-tuzalem: ...u ovome što si prikazao ne može govoriti o overridingu več o overloadu...


Tacno!
Sad mu nije nista, ubio si ga k'o zeca...
 
Odgovor na temu

hyle
Perica Milošević
Belgrade

Član broj: 30030
Poruke: 150
*.dial.InfoSky.Net.

Sajt: www.linkedin.com/in/peric..


+4 Profil

icon Re: override equals() i casting ?15.10.2005. u 01:45 - pre 204 meseci
Slažem se sa me-tuzalemom samo bih odgovorio na sledeće.

Citat:
me-tuzalem: Grešku imaš vjerovatno u nekom djelu koda koji nisi ovdje prikazao. Nema razloga da ti se izvršava Object.equals namjesto tvoje TvojaKlasa.equals


Njemu se izvršava Object.equals zbog toga što uzima elemente iz vektora, a vektor sve svoje elemente tretira kao Object i zbog toga poziva metodu te klase i ne vidi metode iz klasa koje su nasledile Object.


Inače, ova greška, kada se u metodi equals kao argument ne navede Object već neka druga klasa, je jedna od najčešćih početničkih grešaka.

Pozdrav
 
Odgovor na temu

me-tuzalem
mensur tuzalemovic
novi pazar

Član broj: 25730
Poruke: 116
..njuel-bg.customer.sbb.co.yu.



Profil

icon Re: override equals() i casting ?15.10.2005. u 12:31 - pre 204 meseci
Citat:
hyle:
Inače, ova greška, kada se u metodi equals kao argument ne navede Object već neka druga klasa, je jedna od najčešćih početničkih grešaka.

Iako se hyle slaže sa mnom, ja se ovdje ne bih složio. Ne bih ovo smatrao početničkom greškom, možda samo lošom praksom. Potpuno je korektno uraditi overload metode equals.
Nudim par članaka:
1. http://www.ibiblio.org/javafaq/questions/07031998.html
2. http://www.idinews.com/casts.html
3.
http://www.cs.williams.edu/~kim/cs334/s00/Lectures/Lec17/Lec17.html
4. http://www.javapractices.com/Topic17.cjp
5.http://www.geocities.com/technofundo/tech/java/equalhash.html

što ipak ne znači da to treba uvijek raditi. O ovome bi mogla i da se otvori akademska rasprava. Override sa argumentom Object je po meni bolja programerska praksa, ali ni overload sa nekim drugim argumentom nije zabranjen.
Međutim, tiranin je u svom prvom postu naveo da je uradio casting kada je uzimao objekat iz Vectora. Ako jeste, onda bi trebalo da se izvrši oveloadovana metoda equals. Ako nije, onda se izvršava equals iz Object klase.
 
Odgovor na temu

Au197/79
Zlatan Kadragić
Minhen

Član broj: 3556
Poruke: 772
*.ETF.BG.AC.YU.

Sajt: aurelije.blogspot.com


+47 Profil

icon Re: override equals() i casting ?15.10.2005. u 14:53 - pre 204 meseci
Zato lepo javu 5 u ruke i pišite anotaciju @Override i neće biti ovakvih "bubica".
Bolje džaba ležat nego džaba radit.
 
Odgovor na temu

smrz
promenio bi

Član broj: 61190
Poruke: 98
*.dialup.neobee.net.

Sajt: 70.84.131.212/data/toons/..


Profil

icon Re: override equals() i casting ?15.10.2005. u 22:44 - pre 204 meseci
Citat:
Tiranin:...
MojaKlasa mk = (MojaKlasa) enm.nextElement();
if(mk.equals(drugaInstanca)){...}


Citat:
me-tuzalem:
Međutim, tiranin je u svom prvom postu naveo da je uradio casting kada je uzimao objekat iz Vectora. Ako jeste, onda bi trebalo da se izvrši oveloadovana metoda equals. Ako nije, onda se izvršava equals iz Object klase.


Gde piše kako je kastovana drugaInstanca? I ona utiče na to koja metoda će biti pozvana.
 
Odgovor na temu

hyle
Perica Milošević
Belgrade

Član broj: 30030
Poruke: 150
*.dial.InfoSky.Net.

Sajt: www.linkedin.com/in/peric..


+4 Profil

icon Re: override equals() i casting ?16.10.2005. u 02:52 - pre 204 meseci
Citat:
me-tuzalem: Potpuno je korektno uraditi overload metode equals.

Override sa argumentom Object je po meni bolja programerska praksa, ali ni overload sa nekim drugim argumentom nije zabranjen.


Metoda Object.equals(Object) je bitna zbog toga što je intenzivno koriste bazne javine klase i ljudi ih najčešće implementiraju u svojim klasa baš iz tog razloga što ih koriste u kombinaciji sa njima. Tu metodu koristi npr. HashMap prilikom stavljanja i uzimanja objekata iz mape ili na primer bilo koji Set i zbog toga je bitno da budu ispravno implementirane.
Naravno da je potpuno ispravno da napišeš svoju metodu equals koja kao argument neće primati Object već neku drugu klasu ali tu metodu neće videti HashMap ili neka druga bazna javina klasa tako da ne možeš da se oslanjaš na funkcionalnost tih klasa.
 
Odgovor na temu

[es] :: Java :: override equals() i casting ?

[ Pregleda: 4104 | Odgovora: 15 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.