java - 扩展 List 及其泛型

标签 java list generics extend

我正在尝试做这样的事情:

public class MyClass1 implements IMyInterface{
    public boolean myMethod(){
        ...
    }
}
public class MyClass2 implements IMyInterface{
    public boolean myMethod(){
        ...
    }
}
public class MyList<T extends IMyInterface> extends ArrayList<T>{
    public T getSomething(){
        for (int i = 0; i < size(); i++) {
            if (get(i).myMethod())
                return get(i);
        }
        return null;
    }
}

所以我可以这样使用它

public class MyClass3{
    public void doSomething(MyList<IMyInterface> list){
        ...
    }
}
public class MyClass4{
    public MyList<MyClass1> list1;
    public MyList<MyClass2> list2;

    public MyClass4(){
        MyClass3.doSomething(list1);
        MyClass3.doSomething(list2);
    }
}

但是我收到一条错误消息:MyClass3 类型中的方法 doSomething(MyList) 不适用于参数 (MyList)

最佳答案

方法定义

public void doSomething(MyList<IMyInterface> list){
        ...
}

表示它只接受MyList类型 IMyInterface 。您不能将 MyList 传递给它类型 MyClass1 or MyClass2MyList<MyClass1>是原始类型 MyList 的子类型,但不是参数化类型 MyList<IMyInterface> .

您需要使用bounded wildcard type来处理这样的情况。您需要使参数接受 MyList类型 IMyInterface or some subtype of IMyInterface 。所以为了让它工作,改变doSomething的方法参数对此;

public void doSomething(MyList<? extends IMyInterface> list){
...
}

关于java - 扩展 List 及其泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19589234/

相关文章:

java - 字符串数组的拆分和排序

java - GET 与 POST 发送一些静态参数

java - 如何解决异常 org.hibernate.SessionException : Session was already closed

Python:如何从内置列表类型继承?

python - 根据 Python 中的列表元素检查输入

java - 如何创建根据 T 表现不同的通用方法?

java - 将多个嵌套列表压缩在一起

c - 移动双链表中的项目范围? [C]

generics - 如何对泛型添加约束

c# - 使用 Func<T, string> 委托(delegate)列表对 IQueryable 执行 .Select()