Tak koukam, ze C# ma v tomto ohledu genericitu zmaklou lepe :-( 2009/6/16 Martin Kuba <[email protected]>: > To nejde, protože pro generickou třídu existuje jen jeden soubor .class > a parametrizace v době překladu už není k dispozici v době běhu. > > Vím o třech způsobech, jak tohle řešit: > > 1) nepoužívat pole, ale List<T>, protože vytvořit instanci Listu > je triviální > > 2) zapamatovat si třídu, kterou se parametrizuje, tj. > > Class<T_DB> classDb; > Class<T_WSDL> classWsdl; > > //konstruktor > public DbToWsdlConvertor(Class<T_DB> classDb, Class<T_WSDL> classWsdl) { > this.classDb = classDb; > this.classWsdl = classWsdl; > } > > public T_WSDL[] dbTypeArrayToWsdlArray() { > T_WSDL[] ret = ( T_WSDL[] ) Array.newInstance(classWsdl, tmp.length ) ; > ... > } > > 3) využít fintu odkoukanou z Hibernate spočívající v tom, že anonymní > potomek vzniklý parametrizací generické třídy má ve svém .class > zakompilováno, jakou třídou se parametrizovalo. Při použití > se musí používat anonymní potomci generické třídy, tj. > > DbToWsdlConvertor<TridaA,TridaB> d2w = new > DbToWsdlConvertor<TridaA,TridaB>() { }; > > a pak lze použít > > Class<T> classDb = (Class<T>) ((ParameterizedType) > getClass().getGenericSuperclass()).getActualTypeArguments()[0]; > Class<T> classWsdl = (Class<T>) ((ParameterizedType) > getClass().getGenericSuperclass()).getActualTypeArguments()[1]; > > pro zjištění, čím bylo parametrizováno. > > Makub > > > vkrejcirik napsal(a): >> Dobry den, chtel bych se zeptat jak by slo vytvorit instanci parametru >> genericke tridy. Mam nasledujici kod: >> >> public class DbToWsdlConvertor<T_DB, T_WSDL> { >> ... >> public T_WSDL[] dbTypeArrayToWsdlArray() { >> ... >> v teto metode potrebuji vytvorit instanci pole prvku typu T_WSDL. >> Pokousel jsem se na to jit takto: >> >> ParameterizedType type = (ParameterizedType) >> this.getClass().getGenericSuperclass(); >> Class classWsdl = (Class) type.getActualTypeArguments()[1]; >> T_WSDL[] ret = ( T_WSDL[] ) Array.newInstance(classWsdl, tmp.length ) ; >> >> Bohuzel dostavam java.lang.ClassCastException: java.lang.Class >> >> Mohl by mi nekdo poradit? Dekuji >> > > > -- > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > 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 > -------------------------------------------------------------- > >
-- Ondra Medek
