Re: Непонятки с синтаксисом
От: mkizub Литва http://symade.tigris.org
Дата: 28.11.08 09:26
Оценка: 1 (1)
Здравствуйте, yvad, Вы писали:

Y>Есть следующая иерархия:


class A {}
class B extends A {}
    
class LA<T extends A> {}
class LB<T extends B> extends LA<T> {}


Y>Как скастить LB<B> в LA<A>?


Никак, потому что:

class A {}
class B extends A {}
    
class LA<T extends A> { T t; }
class LB<T extends B> extends LA<T> {}
...
LB<Integer> lbi = new LB<Integer>();
lbi.t = new Integer(0);
LA<Number> lan = (LA<Number>)lbi;
lan.t = new Double(0.0);

assert (lbi.t instanceof Integer);


Ты можешь скастить только в read-only версию, то есть

LB<Integer> lbi = new LB<Integer>();
lbi.t = new Integer(0);
LA<? extends Number> lan = lbi;
lan.t = new Double(0.0); // compile-time error

assert (lbi.t instanceof Integer);


тогда это будет type safe.
SOP & SymADE: http://symade.tigris.org , блог http://mkizub.livejournal.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.