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
