带通配符的Java泛型
有任何方法可以解决这种情况(我已尽可能简化场景):带通配符的Java泛型,java,generics,bounded-wildcard,Java,Generics,Bounded Wildcard,有任何方法可以解决这种情况(我已尽可能简化场景): 公共类测试{ 公共静态void main(字符串[]args){ /* *在这里,我想指出CollectionGeneric可以是 *扩展Animal(但构造函数不允许 *通配符) */ CollectionGeneric这意味着无法证明这两个集合具有相同的类型界限: CollectionGeneric<? extends Animal> animalsCollectionGeneric = ne
公共类测试{
公共静态void main(字符串[]args){
/*
*在这里,我想指出CollectionGeneric可以是
*扩展Animal(但构造函数不允许
*通配符)
*/
CollectionGeneric这意味着无法证明这两个集合具有相同的类型界限:
CollectionGeneric<? extends Animal> animalsCollectionGeneric =
new CollectionGeneric<Animal>();
List<? extends Animal> animals = getAnimals()
collectiongenerico出于兴趣,为什么要使用CollectionGeneric而不只是使用列表?@Nick Holt:正如我在开始时所说的,这是我问题的一个非常简单的版本,相信我,我必须使用CollectionGeneric类很好的答案。请注意,如果你想添加addBeans()方法,它可以简单地获取T类型的对象。Josh Bloch在Google I/O上做了一次关于泛型和通配符的演讲。参见
The method setBeans(List<capture#2-of ? extends Animal>) in the type
CollectionGeneric<capture#2-of ? extends Animal> is not applicable for
the arguments (List<capture#3-of ? extends Animal>)*
CollectionGeneric<? extends Animal> animalsCollectionGeneric =
new CollectionGeneric<Animal>();
List<? extends Animal> animals = getAnimals()
public void setBeans(List<? extends T> beans) {}
public List<T> getBeans();
List<? extends Animal> beans = getBeans();
GenericCollection<Animal> animals = new GenericCollection<Animal>();
animals.add(beans);