Martin Beránek napsal(a): > Dne Thursday 22 of November 2007 11:33:08 Martin Kuba napsal(a): >> Petr Gola napsal(a): >>> Řekl bych, že new T() nefunguje, protože T je dostupný jen pro >>> kompilaci. Je to sice ukecanější - je třeba předávat ještě "T.class", >>> ale je to navíc informace, která přežije kompilaci :) >> Tak tak, třída MyClass existuje jen jednou, takže >> v souboru MyClass.class nemůže být informace, o jaké T se jedná. >> Nezbývá, než si předat informaci o třídě T jako parametr. >> >> Makub > > dalším spůsobem jak získat Class<T> je tenhle (musí být voláno uvnitř třídy > MyClass): > > (Class<T>) ((ParameterizedType) > getClass().getGenericSuperclass()).getActualTypeArguments()[0]; > > mým zdrojem bylo tohle: http://www.hibernate.org/328.html#A6
To nemůže fungovat. Když to zkusím, tak dostanu Exception in thread "main" java.lang.ClassCastException: sun.reflect.generics.reflectiveObjects.TypeVariableImpl cannot be cast to java.lang.Class což je podle mne správně. Ta informace o typu použitém k parametrizaci prostě není k dispozici. Kromě toho to vrací parametrický typ nadtřídy, ne té samotné třídy, všimněte si, že v tom příkladu je public abstract class GenericHibernateDAO<T, ID extends Serializable> implements GenericDAO<T, ID> { tj. vrací to typovou proměnnou T z GenericDAO, ne z GenericHibernateDAO. Ale to je jedno. 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 --------------------------------------------------------------
smime.p7s
Description: S/MIME Cryptographic Signature