Díky za odpověď, pane Troníčku, už to chápu proč :-)

Všiml jsem si, že se nové verze javac většinu věcí staží překládat do zpětně
kompatibilního bajtkódu.

Není to až příliš limitující? Jako vývojář bych měl přece udělat rozhodnutí
pro jaké minimální JDK má aplikace poběží. A to ne jen ve smyslu nových API
v nových JDK, ale i nové syntaxe. Když bych chtěl překládat do starší verze
(--source-level), ale mám nové prvky JDK, pak by mi to jen nedovolilo. Bylo
by pak možné zavést mnohem více novinek....

Libor

Dne 12. června 2011 13:51 "Zdeněk Troníček" <[email protected]>napsal(a):

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

Odpovedet emailem