I found strange generics behaviour. In two words - 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. The discuss thread is also awailable in my blog http://pronicles.blogspot.com/2010/03/unexpected-generics-behaviour.html.
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();
}
}