Здравствуйте, mkizub, Вы писали:
M>Здравствуйте, yvad, Вы писали:
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>>>
Y>>Но позволяет LA lan = lbi;
Y>>Какой в таком случае будет T?
M>Конкретно в этом коде — T будет A.
M>Я ошибся когда писал, потому как LA<Integer> писать нельзя было, так как Integer не extends A.
M>Ява позволяет это делать для обратной совместимости, и в байткоде генерируется class LA { A t; } и LB extends LA {}
M>А информация <T extends B> в байткоде никак не отображена (забыта). А для доступа к lbi.t будет везде сгенерирован каст ((B)lbi.t), который и может сработать если сделать LA lan = lbi; lan.t = new A(); B b = lbi.t;
Тогда мне подходит.
Только смущает, что нельзя почему-то написать LA<A> lan = lbi;