我正在尝试做这样的事情:
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 MyClass2
。 MyList<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/