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

Kako dobiti referencu na objekat pomoću naziva (Stringa) objekta?

[es] :: Java :: Kako dobiti referencu na objekat pomoću naziva (Stringa) objekta?
(Zaključana tema (lock), by hyle)
Strane: 1 2

[ Pregleda: 7440 | Odgovora: 33 ] > FB > Twit

Postavi temu

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

anon315

Član broj: 315
Poruke: 1657
*.adsl.sezampro.yu.



+13 Profil

icon Kako dobiti referencu na objekat pomoću naziva (Stringa) objekta?20.06.2006. u 00:09 - pre 216 meseci
Pojavila mi se potreba za sledećim:

Imam mnogo objekata iste klase i za svaki od tih objekata treba da pozovem isti metod, a objekti su zgodno nazvani, npr:

Code:

obj1.metod();
obj2.metod();
obj3.metod();
...
objn.metod(); // Gde n može (i jeste) da bude veliki broj!


Po inerciji čoveku padne na pamet:

Code:

String s;
for(int i=1; i<=n; i++) {
     s="obj" + i;
     // I ŠTA SAD?
}


Dakle, imam ime objekta, ali kao string i sad je pitanje kako da na osnovu tog stringa dobijem referencu, da bih mogao da pozovem metodu...

Poz.
V
 
0

Branko Santo
Tu i tamo

Član broj: 57312
Poruke: 2232
..mtsns-ns.customer.sbb.co.yu.

Sajt: cz.linkedin.com/in/branko..


+600 Profil

icon Re: Kako dobiti referencu na objekat pomoću naziva (Stringa) objekta?20.06.2006. u 04:55 - pre 216 meseci
Napravi listu sa svim objektima i onda kad treba da pozoves ti samo iteraturjes i pozivas metod.
 
0

logotet
Beograd

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

Sajt: www.logotet.com


Profil

icon Re: Kako dobiti referencu na objekat pomoću naziva (Stringa) objekta?20.06.2006. u 08:01 - pre 216 meseci
Ja bih radije imao
Code:

Object[] obj = new Object[n]; // naravno stavis svoju klasu umesto Object
.
.
.// a u petlji pozivas
obj[i].metod();


A, ako bas hoces kako si resio onda pogledja java.lang.reflect paket i uopste procitaj nesto o "reflection".
Retko koristim, pa samo po secanju, islo bi otrpilike:

Code:

          Class c = Class.forName("TvojaKlasa");
           Method met = cls.getMethod("metoda");
           met.invoke(???);

pogledaj u API dokumentaciji tacne pozive, bas se i ne secam najbolje, a mrzi me da ceprkam.

Napomena: ako su ti objekti vec instancirani onda moras da imas niz, kolekciju ..., ne mozes ga naci po nazivu reference.
 
0

anon315

Član broj: 315
Poruke: 1657
*.adsl.sezampro.yu.



+13 Profil

icon Re: Kako dobiti referencu na objekat pomoću naziva (Stringa) objekta?20.06.2006. u 10:44 - pre 216 meseci
Objekti su vec instancirani, a pravljenje kolekcije i dodavanje svih objekata u kolekciju, pa onda pozivanje preko iteriranja je u sustini jos glomaznije, zar ne? (jer moram prvo sve da ih dodam, a to mu dodje na isto)
 
0

milas

Član broj: 29337
Poruke: 588
*.jprb-kolubara.co.yu.



+3 Profil

icon Re: Kako dobiti referencu na objekat pomoću naziva (Stringa) objekta?20.06.2006. u 13:12 - pre 216 meseci
Ono sto ti hoces je da dobijes instance (objekte) neke klase koji su kreirani u virtuelnoj masini. To ne mozes uraditi sa refleksijama. Pogledaj uputstvo za Javinu virtuelnu masinu za resavanje tog problema.
 
0

anon315

Član broj: 315
Poruke: 1657
*.adsl.sezampro.yu.



+13 Profil

icon Re: Kako dobiti referencu na objekat pomoću naziva (Stringa) objekta?20.06.2006. u 13:38 - pre 216 meseci
Uh, sad si mi bas pomogao
 
0

hyle
Perica Milošević
Belgrade

Član broj: 30030
Poruke: 150
82.117.193.*

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


+4 Profil

icon Re: Kako dobiti referencu na objekat pomoću naziva (Stringa) objekta?20.06.2006. u 14:23 - pre 216 meseci
Lepo su ti ljudi rekli da koristiš niz. Ništa tu nije glomazno, čak je mnogo elegantnije da deklarišeš promenljive u jednoj liniji sa
Code:

   TvojaKlasa objekti[] = new TvojaKlasa[100];

nego da deklarišeš svaku promenljivu pojedinačno sa
Code:

   TvojaKlasa objekat1;
   TvojaKlasa objekat2;
   TvojaKlasa objekat3;
   ...
   TvojaKlasa objekat100;


Objekte možeš da iskreiraš u jednoj petlji, a ne da kreiraš svaki pojedinačno:
Code:

    for (int i = 0; i < 100; i++) {
        objekti[i] = new TvojaKlasa();
    }


Isto tako, tvoj metod možeš da pozivaš u petlji:
Code:

   for (int i = 0; i < 100; i++) {
      objekti[i].metod();
   }


Pretpostavljam da imaš neki ograničen broj promenljivih koje su ti potrebne pa si kreirao pojedinačne promenljive, recimo 30 komada. Šta ćeš raditi ako ti si ukaže potreba da imaš 1000 ili milion različitih objekata? Pravićeš promenljive?

Nije mi jasno šta ti u ovakvom pristupu ne odgovara i zbog čega je bolje da imaš gomilu promenljivih umesto jednog niza?
 
0

boorchoo

Član broj: 98911
Poruke: 2
*.yubc.net.



Profil

icon Re: Kako dobiti referencu na objekat pomoću naziva (Stringa) objekta?20.06.2006. u 15:12 - pre 216 meseci
Nema ti spasa. Koristi mapu (npr. HashMap) sa stringovima kao ključevima. Bedara je što ćeš morati da je puniš već kreiranim objektima.
 
0

mucky
Aleksandar Mastilović
Freelancer
Novi Sad - Srbija

Član broj: 237
Poruke: 412
*.ptt.yu.



+1 Profil

icon Re: Kako dobiti referencu na objekat pomoću naziva (Stringa) objekta?20.06.2006. u 15:28 - pre 216 meseci
Moram da primetim kako je suludo imati promenljive sa nazivima
objekat1, objekat2, objekat3, ... , objekatN
a ne koristiti niz :)

Mislim da moras da imas izuzetno dobar razlog zbog kog ovako radis,
jer u suprotnom slucaju za ovakvu realizaciju ima samo jedan naziv:
izuzetno lose programiranje :)
 
0

degojs

Član broj: 4716
Poruke: 5096



+51 Profil

icon Re: Kako dobiti referencu na objekat pomoću naziva (Stringa) objekta?20.06.2006. u 16:25 - pre 216 meseci
Citat:
Vanja:
Objekti su vec instancirani, a pravljenje kolekcije i dodavanje svih objekata u kolekciju, pa onda pozivanje preko iteriranja je u sustini jos glomaznije, zar ne? (jer moram prvo sve da ih dodam, a to mu dodje na isto)


Kada se dodaju objekti u kolekciju, ne dodaju se nikakve kopije objekata, već samo reference na postojeće objekte. Dakle, nema razloga da ne koristiš kolekcije.

Jednostavno, kako kreiraš objekte, odmah ih i dodaj u neku kolekciju.

Commercial-Free !!!
 
0

uranium
Beograd

Član broj: 60097
Poruke: 543
*.eunet.yu.

Jabber: uranium@elitesecurity.org
ICQ: 324386953


+5 Profil

icon Re: Kako dobiti referencu na objekat pomoću naziva (Stringa) objekta?20.06.2006. u 17:09 - pre 216 meseci
Evo dopune rešenja koje je dao logotet:

Code:

class TvojaKlasa{
        public Nesto obj1;
        public Nesto obj2;
        .
        .
        public Nesto objn;
        . 
        .
        .
}


Code:

import java.lang.reflect.*;
.
.
.
        TvojaKlasa k=new TvojaKlasa();
        Class<?> c=Class.forName("TvojaKlasa");

        
        for(int i=1;i<=n;i++){
            Nesto x=(Nesto)c.getField("obj"+i).get(k);
            x.metod();
        }



[Ovu poruku je menjao uranium dana 20.06.2006. u 18:26 GMT+1]
Attempt all the problems. Those you can do, don't do. Do the ones you cannot.
 
0

milas

Član broj: 29337
Poruke: 588
*.ptt.yu.



+3 Profil

icon Re: Kako dobiti referencu na objekat pomoću naziva (Stringa) objekta?20.06.2006. u 17:40 - pre 216 meseci
Ne, ne, ovo ne moze da se resi koriscenjem refleksija. Jedino je moguce resititi koriscenjem JVM TI agenta (native native). Funkcija je IterateOverInstancesOfClass:

http://java.sun.com/j2se/1.5.0...ml#IterateOverInstancesOfClass

Ovaj pristup bi radio da vezes sve instance odredjenog tipa koji hoces, i onda da pozoves GetObjectsWithTags da uzmes JNI referencu ka objektima. Mozes pokusati da vratis ovaj niz objekata tvom java kodu i onda da pozoves metod koji hoces.

Nadam se da ce ti ovo pomoci.
 
0

anon315

Član broj: 315
Poruke: 1657
*.yubc.net.



+13 Profil

icon Re: Kako dobiti referencu na objekat pomoću naziva (Stringa) objekta?20.06.2006. u 18:04 - pre 216 meseci
Prvo, ne znam zasto tako agresivni stavovi, pogotovu od moderatora, al' nema veze...

Verovatno je to posledica cinjenice da nisam naglasio da objekte ne instanciram sam, jer u tom slucaju sigurno ne bih pravio n objekata rucno. Trik je u tome sto koristim NetBeansov GUI bilder (sto inace ne praktikujem) jer radim na jednom pozamasnom projektu, gde sam isprogramirao negde oko 60 svojih beanova, pa je ovako brze, jer ima mnogo da se crta. On sam instancira te objekte, a pritom zakljucava deo koda itd, itd..

U svakom slucaju, hvala svima na trudu.

1/100 gui-ja, svaka linijica itd. je jedan objekat...



Milas, pogledacu to sto predlazes, to mi trenutno deluje kao jedino moguce resenje u mom slucaju!

Poz.
V
Prikačeni fajlovi
 
0

hyle
Perica Milošević
Belgrade

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

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


+4 Profil

icon Re: Kako dobiti referencu na objekat pomoću naziva (Stringa) objekta?20.06.2006. u 23:22 - pre 216 meseci
Nisam imao nameru da zvučim agresivno, izvinjavam se ako je tako izgledalo

Na osnovu načina na koji si formulisao pitanje delovao si kao neko ko ne poznaje koncept nizova pa sam hteo svojim odgovorom da te nateram da porazmisliš o problemu i uvidiš prednost nizova.

Možda postoji neko ograničenje koje nisi izneo ali na osnovu stvari koje si rekao u prethodnim poruka tvoje rešenje mi sa programerske strane i dalje deluje dosta ružno...

Ako baš želiš na taj način da rešiš problem onda možeš da iskoristiš i predlog koji je dao Uranium.

Preko refleksije ne možeš da zahtevaš direktan pristupu promenljivoj pod određenim nazivom npr. "obj1" ali zato možeš da dođeš do promenljive ukoliko ona predstavlja atribut neke druge klase:
Citat:

Code:

class TvojaKlasa{
        public Nesto obj1;
        public Nesto obj2;
        .
        .
        public Nesto objn;
        . 
        .
        .
}



Za neku instancu klase TvojaKlasa bez problema možeš refleksijom da očitaš vrednosti njenih property-ja: obj1, ..., objN na način koji je Uranium predložio.
 
0

anon315

Član broj: 315
Poruke: 1657
*.adsl.sezampro.yu.



+13 Profil

icon Re: Kako dobiti referencu na objekat pomoću naziva (Stringa) objekta?21.06.2006. u 00:21 - pre 216 meseci
Bas bih voleo da mi objasnis sta ti to i dalje deluje ruzno??? Mislim, volim da cujem kritike, ali argumentovane...

Prosto mi deluje neverovatno da ni moderator ne moze da shvati najprostiju stvar koju objasnjavam, dakle (milas je jedini skapirao):

Kada prevlacim binove automatski se instanciraju linije i posle pozicioniraju i tako dalje i to mi zavrsava posao. Ja ne mogu da promenim nacin rada gui bildera, a i ne znam zasto bih to radio. Da naknadno ubacujem u kolekciju je krajnje glupo jer to onda nije resen problem, isto bih morao 100 puta da pozivam nesto itd..

Uraniumovo resenje ne pije vodu, jer vec imam instancirane objekte, a iz same te klase (tj. jedne njene metode) gde se nalaze ti objekti moram da pozovem te metode...

Prosto ko pasulj, samo niko ne zna da resi problem i to je to...
 
0

anon315

Član broj: 315
Poruke: 1657
*.adsl.sezampro.yu.



+13 Profil

icon Re: Kako dobiti referencu na objekat pomoću naziva (Stringa) objekta?21.06.2006. u 00:29 - pre 216 meseci
Alternativno resenje (koje sam vidjao u drugim projektima ovog tipa - naime, u pitanju je simalator procesora) je da sam bean ima i jednu referencu na drugi takav bean, pa se na taj nacin resavao problem, ali to nije ono sto ja ovde pitam...
 
0

degojs

Član broj: 4716
Poruke: 5096



+51 Profil

icon Re: Kako dobiti referencu na objekat pomoću naziva (Stringa) objekta?21.06.2006. u 01:21 - pre 216 meseci
Vanja, možda ovo može da ti pomogne:

NetBeans Quick Tip #23 - Changing Code in Blue Guarded Blocks

I noticed that some folks had a hard time finding out how to modify the blue, guarded code generated by Matisse. You can change this code from the Code tab in the component's properties. This winklet shows how to do it for constructors with parameters:

http://blogs.sun.com/roller/pa...netbeans_quick_tip_23_changing

Inače, bez ljutnje, ali zaista izgleda da stvari radiš totalno naopako. Ja lično neću da te ubeđujem :>

[Ovu poruku je menjao degojs dana 21.06.2006. u 02:38 GMT+1]
Commercial-Free !!!
 
0

degojs

Član broj: 4716
Poruke: 5096



+51 Profil

icon Re: Kako dobiti referencu na objekat pomoću naziva (Stringa) objekta?21.06.2006. u 02:06 - pre 216 meseci
E da, imam još jedno pitanje koje možda može da ti pomogne: ne radim Javu sa te strane (GUI) ama baš nikako, ali zar nisu svi objekti (GUI elementi) već u nekoj kolekciji tipa (sad lupam): JPanel ima niz komponenti koje sadrži i prikazuje, itd? Nešto tipa:

Code:

.....
javax.swing.JPanel jp = (javax.swing.JPanel) mojPanel;
java.awt.Component[] c = jp.getComponents();

for( int i = 0; i< c.length; i++)
{
  javax.swing.JButton jb = (javax.swing.JButton) c[i];
  System.out.println( c[i].getText() );
}


Gde bi naravno u petlji samo proveravao da li je komponenta potrebnog tipa (instanceof)..

Ovaj gore kod kao izlaz kod mene daje:
Hello
Hello2

što odgovara onom što imam u dizajneru:





[Ovu poruku je menjao degojs dana 21.06.2006. u 03:34 GMT+1]
Commercial-Free !!!
Prikačeni fajlovi
 
0

anon315

Član broj: 315
Poruke: 1657
*.yubc.net.



+13 Profil

icon Re: Kako dobiti referencu na objekat pomoću naziva (Stringa) objekta?21.06.2006. u 07:44 - pre 216 meseci
Nisu Degojs...

Ok, nemam nameru da menjam definiciju promenljivih jer bih onda morao potpuno da izmenim i deo koda koji radi sa njima, a taj kod ima zilion linija po bloku...

You are missing the point!

Nebitno, hvala na paznji, dovidjenja...
 
0

ph4t
Svetozar Misljencevic
between two worlds

Član broj: 5306
Poruke: 111
..5.70.adslpower.by.edpnet.be.



Profil

icon Re: Kako dobiti referencu na objekat pomoću naziva (Stringa) objekta?21.06.2006. u 08:44 - pre 216 meseci
Citat:
milas: Ne, ne, ovo ne moze da se resi koriscenjem refleksija. Jedino je moguce resititi koriscenjem JVM TI agenta (native native). Funkcija je IterateOverInstancesOfClass:

http://java.sun.com/j2se/1.5.0...ml#IterateOverInstancesOfClass

Ovaj pristup bi radio da vezes sve instance odredjenog tipa koji hoces, i onda da pozoves GetObjectsWithTags da uzmes JNI referencu ka objektima. Mozes pokusati da vratis ovaj niz objekata tvom java kodu i onda da pozoves metod koji hoces.

Nadam se da ce ti ovo pomoci.


Ovo je po mom misljenju dosta ruzno rjesenje. Praviti agenta u C/C++ samo da bi rjesio ovaj problem? I onda mora jos posebno za svaki OS da kompajilra taj agent library.

[Ovu poruku je menjao ph4t dana 21.06.2006. u 09:54 GMT+1]
 
0

[es] :: Java :: Kako dobiti referencu na objekat pomoću naziva (Stringa) objekta?
(Zaključana tema (lock), by hyle)
Strane: 1 2

[ Pregleda: 7440 | Odgovora: 33 ] > FB > Twit

Postavi temu

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