Ahoj, protože typový parametr není za běhu k dispozici. Při překladu jej překladač odstraní. Např.
class Box<T> { T t; Box(T t) { } } se přeloží jako class Box { Object t; Box(Object t) { } } Pokud potřebuješ v konstruktoru typový parameter, lze to udělat přes parametr typu Class: class Box<T> { T t; Box(Class<?> c, T t) { System.out.println(c.getName()); } } Box<String> b = new Box<String>(String.class, "abc"); Z.T. -- Zdenek Tronicek FIT CTU in Prague Libor Jelinek napsal(a): > Hezké nedělní poledne! > Možná jsem málo studoval genericitu, ale proč není možné použít T.class (a > T.class.getName() apod.) v tomto případě? > > public class NewClass<T> { > > public NewClass() { > System.out.println("Zavolali jste mě s typem " + > T.class.getName()); > } > > public static void main(String[] args) { > new NewClass<String>(); > new NewClass<Integer>(); > } > } > > NetBeans varuje hláškou: "Cannot select from a type variable". > > Pokus o překlad dopadne chybou: > > Exception in thread "main" java.lang.RuntimeException: Uncompilable source > code - Erroneous tree type: <any> > at beantablemodel.NewClass.<init>(NewClass.java:14) > at beantablemodel.NewClass.main(NewClass.java:18) > Java Result: 1 > > Vždyť to je známo jaký objekt jsem dodal (new NewClass<String>()) a na > každý > objekt je možné použít .class... > > Díky za odpovědi! > Libor >