Funguje to, v DAO pouzivam neco podobneho pro zjisteni enity, kterou
je parametrizovane
protected Class<E> getPersistentClass() {
ParameterizedType pt = ((ParameterizedType)
getClass().getGenericSuperclass());
String entityClassName =
((Class)pt.getActualTypeArguments()[0]).getName();
try {
return (Class<E>) getClass().forName(entityClassName);
} catch (ClassNotFoundException e) {
throw new RuntimeException("Entity class not found!", e);
}
}
On Nov 22, 2007 1:36 PM, Martin Kuba <[EMAIL PROTECTED]> wrote:
> 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
> --------------------------------------------------------------
>
>
--
S pozdravem Roman "Dagi" Pichlik
/* http://www.sweb.cz/pichlik/ Blog pro kodery */