[ _owl_ @ 25.02.2005. 18:49 ] @
Zelim da napravim genericku factory klasu koja na osnovu tipa parametra treba da vrsi dinamicko ucitavanje neke druge klase. Problem je sto ne znam kako da tip parametra <T> pretvorim u string cija je vrednost run-time ime klase koja odgovara tom tipu. Evo kostura koda koji bi trebao da radi kreiranje objekata.
Code:

    public class GenericFactory<T> {
        public T createObject() {
            try {
                // Ovaj deo ne radi, prijavljuje se greska kod poziva toString() metode
                Class klasa=Class.forName("bla.bla." +T.toString() + "bla.bla.BLA");
                return klasa.newInstance();
            } catch (Exception e) {}
        }
    }


Probao sam da preko this.getClass().getTypeParameters() dodjem do imena tipa parametra ali bezuspesno.
Svaka pomoc je dobrodosla.
[ filmil @ 25.02.2005. 21:31 ] @
Ne koristim 1.5 pa ne mogu da ti pomognem oko generičkog programiranja; ali mi deluje da pošto je T ime tipa a ne promenljive, ne možeš da pozivaš metode preko T (zamisli npr. HashMap.toString(), šta bi to trebalo da bude?).

Imali smo na forumu C/C++ vrlo sličnu zabunu pre dan-dva. Osim toga, .toString() ti ne daje ime klase, već teksutalni zapis klase — što ne mora da ima bilo kakve veze sa imenom klase.

Tako da bih predložio da probaš:
Code:

 T.class.getName() 


umesto

Code:
T.toString()


Pišem napamet, što se često ovih dana dešava, al možda se nisam zeznuo. :)

f
[ _owl_ @ 25.02.2005. 22:15 ] @
Da, da napamet sam pisao poruku, sto se tice T.class to sam isto bio probao ali nece pa nece.
[ samilen @ 27.02.2005. 20:46 ] @
Nisam najbolje shvatio pitanje jer još nisam našao vremena da se pozabavim generics-ima, ali evo jednog predloga za razmišljanje: this.getClass().getName()... umesto onog ...toString()... što će ti vratiti kompletnu putanju koja već ima bla.bla.bla... u sebi. Iseci sve posle zadnje tačke i ubaci ime klase koju hoćeš da instanciraš.
toString ti ne radi jer još nemaš instancu.
Ajde javi kako je ispalo rešenje.
[ yes @ 27.02.2005. 23:35 ] @
Pa ljudi?!? Polako!
Da li to T postoji at runtime???
NE!!!
To je imaginarni parametar da bi kompajler proverio da li tu može da "prođe" određeni tip i nista drugo.