четверг, 25 марта 2010 г.

Recursive generic


Увидел нечто подобное у своего коллеги =)


public class X {

  static class A<T extends A<T>> {

    public T createObejct() {
      return null;
    }
  }

  static class B extends A<B> {
    public B createObejct() {
      return null;
    }
  }
  public static void main(String[] args) {
    new B().createObejct();
  }

}



четверг, 11 марта 2010 г.

Unexpected generics behaviour

If someone knows what the fuck please suggest!




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();

  }

}