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: 286
        
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