Roman Pichlik napsal(a):
> Funguje to, v DAO pouzivam neco podobneho pro zjisteni enity, kterou
> je parametrizovane

Nefunguje, ale už jsem pochopil, co chtěl autor toho textu o Hibernate
udělat. Když se extrahuje princip, tak je to něco takového:

import java.lang.reflect.ParameterizedType;

public class Genericka<T> {

    private T t;

    public T getT() {
        return t;
    }

    @SuppressWarnings({"unchecked"})
    public Genericka()  {
        Class<T> tClass = (Class<T>) ((ParameterizedType) getClass()
                .getGenericSuperclass()).getActualTypeArguments()[0];
        try {
            t = tClass.newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        Genericka<String> sg = new Genericka<String>() { };
        String s = sg.getT();
        System.out.println("s = " + s);
    }
}

prosím povšimněte si těch složených závorek ve výrazu

  new Genericka<String>() { };

Je to anonymní potomek třídy Genericka. Ten trik totiž funguje
jenom u potomků generických tříd, které přiřadí parametrickému
typu předka natvrdo nějaký typ. Pokud ty závorky odděláte,
získáte přímo instanci třídy Genericka a vyhodí to výjimku

java.lang.ClassCastException: java.lang.Class cannot be cast to 
java.lang.reflect.ParameterizedType

Nebo aby to bylo zřetelnější, představte si to takhle:

public class Stringova extends Genericka<String> {
    public static void main(String[] args) {
        Stringova sg = new Stringova();
        String s = sg.getT();
        System.out.println("s = " + s);
    }
}

Třída Stringova není parametrizovatelná, a dědí z parametrizovatelné
třídy tak, že parametru natvrdo přiřadí String. Pak má
Stringova.class v sobě informaci, že je potomkem Genericka<String>,
čili se dá to String získat.

Takže je to tak jak jsem psal, nelze ve třídě zjistit, jak
byla parametrizována. Jen lze v jejím neparametrickém potomkovi
zjistit, čím tu parametrizovatelnost zrušil.


Makub
-- 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Supercomputing Center Brno             Martin Kuba
Institute of Computer Science    email: [EMAIL PROTECTED]
Masaryk University             http://www.ics.muni.cz/~makub/
Botanicka 68a, 60200 Brno, CZ     mobil: +420-603-533775
--------------------------------------------------------------

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

Odpovedet emailem