Chr*_*ian 4 java generics interface generic-list
在Java中我有一个interface I,一个class C和一个class D,都实现I:
interface I
{
//some method signatures
}
class C implements I
{
//implement methods from I
}
class D implements I
{
//implement methods from I
}
Run Code Online (Sandbox Code Playgroud)
现在我创建一个List持有元素class C,以及第二个List持有元素D:
List<C> c = new LinkedList<C>();
List<D> d = new LinkedList<D>();
Run Code Online (Sandbox Code Playgroud)
我有一个方法,我想应用于所有持有元素实现的列表interface I:
public void modifyList(List<I> l)
{
//call some method defined in I
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试调用该函数时,编译器会抛出一个错误:
public void testModification()
{
modifyList(c);
modifyList(d);
}
==> The method modifyList(List<I>) in the type [...] is not applicable for the arguments (List<C>) / (List<D>)
Run Code Online (Sandbox Code Playgroud)
我可以通过重新定义我的列表来使其工作,以便它可以读取
List<I> c1 = new LinkedList<I>();
Run Code Online (Sandbox Code Playgroud)
但是现在c1可以从C和D类中保存Elements,这是我想要避免的.如何创建一个List,以便我可以准确定义它应该保持哪个类的元素,但仍然将它用作我的函数的参数?
你可以尝试使用
public void modifyList(List<? extends I> l) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
类型应该是通配符,意思是任何类型,只要它的超类是(...),或者在本例中是I类.