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
>