Java: using generic wildcards with subclassing

Posted by gibberish on Stack Overflow See other posts from Stack Overflow or by gibberish
Published on 2011-01-07T14:14:57Z Indexed on 2011/01/07 14:54 UTC
Read the original article Hit count: 196

Filed under:
|
|
|

Say I have a class Foo, a class A and some subclass B of A. Foo accepts A and its sublclasses as the generic type. A and B both require a Foo instance in their constructor. I want A's Foo to be of type A , and B's Foo to be of type B or a superclass of B. So in effect, So I only want this:

Foo<X> bar = new Foo<X>;
new B(bar);

to be possible if X is either A, B, or a both subclass of A and superclass of B.

So far this is what I have:

class Foo<? extends A>{
    //construct
}


class A(Foo<A> bar){
    //construct
}

class B(Foo<? super B> bar){
    super(bar);
    //construct
}

The call to super(...) doesn't work, because <A> is stricter than <? super B>. Is it somehow possible to use the constructor (or avoid code duplication by another means) while enforcing these types?

Edit: Foo keeps a collection of elements of the generic parameter type, and these elements and Foo have a bidirectional link. It should therefore not be possible to link an A to a Foo.

© Stack Overflow or respective owner

Related posts about java

Related posts about generics