Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java泛型子类型列表和方法错误_Java_Generics - Fatal编程技术网

java泛型子类型列表和方法错误

java泛型子类型列表和方法错误,java,generics,Java,Generics,Java泛型 我是一个新手,泛型尝试创建一个列表,该列表接受A的子元素作为参数 我写了下面的代码,问题的底部有一个错误。感谢您的帮助 abstract class A{ .. } class A1 extends A{ .. } class A2 extends A{ .. } 我想申报一份清单 public class Model{ private List<? extends A> items; public <S extends A> void

Java泛型

我是一个新手,泛型尝试创建一个列表,该列表接受A的子元素作为参数

我写了下面的代码,问题的底部有一个错误。感谢您的帮助

abstract class A{
..
}

class A1 extends A{
..
}
class A2 extends A{
..
}
我想申报一份清单

public class Model{
    private List<? extends A> items;

    public <S extends A> void add(S item){
      items.add(item); // error on this line
    }
}
公共类模型{

private List为什么不使用以下语法而不是泛型

public class Model
{
    private List<A> items ;

    public void add(A item)
    {

    }
}
公共类模型
{
私人清单项目;
公共作废添加(项目)
{
}
}

这是因为泛型是不变的

private List<? extends A> items;

public <S extends A> void add(S item) {
    items.add(item);
}
S
Animal
的特定子类型,但编译器不知道是哪种类型。可能是
items
只包含
Bird
S,我们正试图添加一个
Cat
在鸟类列表中添加一个Cat意味着麻烦,不是吗?items
的类型参数根本不知道我们不能简单地将
Cat
添加到
Dog
s列表中,因此会出现错误


怎么办? 只需删除通配符

List<A> items;

public void add(A item) {
    this.items.add(item);
}
列表项;
公共作废添加(项目){
此.items.add(item);
}
…或使类成为泛型:

class Model<T> {

    List<T> items;

    public void add(T item) {
        this.items.add(item);
    }
}
类模型{
清单项目;
公共作废新增(T项){
此.items.add(item);
}
}

下面的代码是哪个类?我更新了我的问题,例如Model类在下面哪行发生错误?我认为您缺少了部分代码..是否尝试将输入项添加到列表中?是否尝试执行
项。添加(项)
Model::add
中的
?给出的代码没有显示任何错误。缺少实际导致错误的部分。您给出的消息表明您正在尝试在此方法内执行某些操作,或者尝试从其他地方调用它;请将您的完整代码显示为MCVE,好吗?这是泛型。抱歉,我是ref避免这样的注释“这不能回答问题。非常感谢,你解释得很好,我不知道有什么理由将此问题标记为否定:(
class Model<T> {

    List<T> items;

    public void add(T item) {
        this.items.add(item);
    }
}