开发者

Java generic collections and inheritance

开发者 https://www.devze.com 2023-02-20 10:22 出处:网络
Basically I need to have an abstract class, that contains a field of a list that details it can hold subclasses of a certain class, and then create a concrete class that stores a specific subclass of

Basically I need to have an abstract class, that contains a field of a list that details it can hold subclasses of a certain class, and then create a concrete class that stores a specific subclass of that certain class.

Better explained in code I am 开发者_如何学Gosure:

public class A {
}

public class B extends A {
}

public abstract class AbsClass {
    protected List<? extends A> list;
}

public class ConClass extends AbsClass {
    list = new ArrayList<B>();
}

With the above code i get the compiler error

The method add(capture#3-of ? extends A) in the type List < capture#3-of ? extends A> is not applicable for the arguments (B)

the line where the list is instantiated.

How can I get this to work?


Can you just type AbsClass?

public abstract class AbsClass<T extends A> {
    protected List<T> list;
}

public class ConClass extends AbsClass<B> {
    list = new ArrayList<B>();
}

Of course at that point it's not necessary to even move the instantiation to the subclass:

public abstract class AbsClass<T extends A> {
    protected List<T> list = new ArrayList<T>();
}

public class ConClass extends AbsClass<B> {
    //... other stuff ...
}
0

精彩评论

暂无评论...
验证码 换一张
取 消