public class Test { public interface EntityObject { } public interface SomeInterface { } public class BasicEntity implements EntityObject { } public interface BuisnessObject<E extends EntityObject> { E getEntity(); } public interface ComplexObject1<V extends SomeInterface> extends BuisnessObject<BasicEntity> { } public interface ComplexObject2 extends BuisnessObject<BasicEntity> { } public void test(){ ComplexObject1 complexObject1 = null; ComplexObject2 complexObject2 = null; EntityObject entityObject1 = complexObject1.getEntity(); //BasicEntity entityObject1 = complexObject1.getEntity(); wtf incompatible types!!!! BasicEntity basicEntity = complexObject2.getEntity(); } }
четверг, 11 марта 2010 г.
Unexpected generics behaviour
If someone knows what the fuck please suggest!
Подписаться на:
Комментарии к сообщению (Atom)
Not sure what is wrong, but this seems to fix the problem:
ОтветитьУдалитьComplexObject1 complexObject1 = null;
Blogspot ate up my angle brackets
ОтветитьУдалитьComplexObject1<SomeInterface> complexObject1 = null;
Thanks Shams, yes your solution works, but the thing I realy want is to use ComplexObject1 in most general way, and the thing I realy missed is why defined generic type(... extends BuisnessObject) is lost
ОтветитьУдалитьAnother discussions
ОтветитьУдалитьhttp://stackoverflow.com/questions/2445516/unexpected-generics-behaviour
http://community.livejournal.com/ru_java/913723.html#cutid1
Finally, I have decided this is bug - compiler cleans all generics when raw type is used. Remedy is to use ComplexObject1 <?> complexObject1 = null;
ОтветитьУдалитьI posted this as bug on sun, hope they will fix problem.