Re[4]: Непонятки с синтаксисом
От: yvad  
Дата: 29.11.08 15:31
Оценка:
Здравствуйте, 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;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.