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

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

Odpovedet emailem