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

Dobijanje reference na objekat pozivaoc

[es] :: Java :: Dobijanje reference na objekat pozivaoc

Strane: 1 2

[ Pregleda: 7387 | Odgovora: 22 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

hyle
Perica Milošević
Belgrade

Član broj: 30030
Poruke: 150
*.ADSL.neobee.net.

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


+4 Profil

icon Re: Dobijanje reference na objekat pozivaoc11.06.2007. u 22:15 - pre 205 meseci
U C++ se u stack frame-u, između ostalog, nalazi i this pointer i može se koristiti kao bilo koja druga lokalna promenljiva. Ne znam kako Java to radi ali verovatno ima neki sličan mehanizam.

Bilo bi zanimljivo da postoji caller pointer koji bi pokazivao na objekat koji je inicirao metodu. Pitanje je samo šta sa metodama koje se pozvane iz neke statičke metode, npr. iz main(), tu ne postoji objekat koji poziva metodu.

Možda bi moglo nešto da se "izmajmuniše" pomoću AOP-a. U svakom slučaju, klase čije metode treba da budu svesne pozivaoca morale bi da imaju promenljivu (ThreadLocal) koja bi se koristila za čuvanje reference pozivaoca.
 
Odgovor na temu

filmil
Filip Miletić
Oce Technologies B.V., inženjer
hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.xs4all.nl.

Jabber: filmil@jabber.org
ICQ: 36601391


+3 Profil

icon Re: Dobijanje reference na objekat pozivaoc11.06.2007. u 22:24 - pre 205 meseci
Citat:
Cao Filipe, dugo te nije bilo... :)


Izvinjavam se, bio sam zauzet.

Citat:
haube ko ga je pozvao" odnosno da ne mora da se predaje nista, onda mozemo da kazemo da je tvoje resenje znatno kompleksnije od polaznog, "problematicnog" koda ovog tipa:


Zavisi šta želiš da dobiješ. „Jednostavnije“ rešenje koje navodiš zahteva da objekat prosleđen klasi B bude ili klase A ili neke koja je nasleđuje (tj. „? extends A“) da bi program mogao da se prevede. To bez potrebe tesno spreže A i B. Takav kod ne bih pisao ako baš ne moram.

„Komplikovanije“ rešenje ne zahteva da objekat klase A bude objekat nijedne posebne klase. Za čistunce, i poziv metoda foo2 može da se ubaci (inline) u bezimeni objekat. Onda je rešenje prostije, ali manje liči na tvoj primer odozgo.

Krajnji rezultat mogućnost da se pozove neki određeni metod u klasi „iznad“. Ali ovde objekti klasa A i B uopšte nisu spregnuti. B može da se koristi i sa nekakvom klasom C koja radi na isti način. Ovakav kod bih pisao, i to često činim.

Ovako se postiže cilj kog si čini mi se zadao — da metod iz klase B pozove određeni metod klase A. Ali ti si naveo još jedan uslov koji uopšte nije nužan, da prvo sazna koji je objekat pozvao a tek onda da se metod pozove.

Na sličnu temu: http://en.wikipedia.org/wiki/Visitor_pattern

f

 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.paws.umds.ac.uk.

Sajt: dejan.lekic.org


+2 Profil

icon Re: Dobijanje reference na objekat pozivaoc13.06.2007. u 16:37 - pre 205 meseci
Okej, problem je bio sto nisam shvatio poentu pitanja. :) Sada sam lagano prosao kroz pitanje i video da je ono zapravo cisto teorijsko - covek zeli da zna odakle JAVA "cupa" this, i kako uvek "zna" sa kojom referencom da zameni neko "this" u kodu...

hyle je vec objasnio ovaj mehanizam. Svi OO jezici koriste nesto slicno.

Najprostije receno, kada kompajler naidje na objekat.metod(arg1, arg2); onda on to interno, dakle "iza zavese", transformise u funkcija(&objekat, arg1, arg2) .

Uvek je lepo to videti na konkretnom primeru (kako recimo nasledjivanje radi itd.), tako da preporucujem odlican clanak http://www.eventhelix.com/Real...mparingCPPAndCPerformance2.htm , iako nema veze sa JAVOM.
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

[es] :: Java :: Dobijanje reference na objekat pozivaoc

Strane: 1 2

[ Pregleda: 7387 | Odgovora: 22 ] > FB > Twit

Postavi temu Odgovori

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