Здравствуйте, mkizub, Вы писали:
M>Никак, потому что:
M>M>class A {}
M>class B extends A {}
M>class LA<T extends A> { T t; }
M>class LB<T extends B> extends LA<T> {}
M>...
M>LB<Integer> lbi = new LB<Integer>();
M>lbi.t = new Integer(0);
M>LA<Number> lan = (LA<Number>)lbi;
M>lan.t = new Double(0.0);
M>assert (lbi.t instanceof Integer);
M>
M>Ты можешь скастить только в read-only версию, то есть
M>M>LB<Integer> lbi = new LB<Integer>();
M>lbi.t = new Integer(0);
M>LA<? extends Number> lan = lbi;
M>lan.t = new Double(0.0); // compile-time error
M>assert (lbi.t instanceof Integer);
M>
M>тогда это будет type safe.
Но позволяет LA lan = lbi;

Какой в таком случае будет T?