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
--------------------------------------------------------------

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

Reply via email to