我 10 分钟前问了一个类似的问题,但粘贴了错误的代码片段。我真的很抱歉。
我目前面临基类和子类的问题。
虽然将单个对象作为参数(方法单一),但编译器不会抱怨。
但是,如果涉及到列表,编译器会强制我将列表声明为<? extends Base>
之后,我不再被允许将基本类型的对象添加到该列表中。
错误消息:“Generics.C 类型中的方法列表(List<Generics.Base>)不适用于参数(List<Generics.Sub>)”
public class Generics {
class Base { }
class Sub extends Base{ }
interface I {
public void list( List<Base> list );
public void single( Base list );
}
class C implements I {
public void list( List<Base> b) { }
public void single( Base p) { }
}
void test() {
C c = new C();
c.single( new Sub() );
List<Sub> b = new ArrayList<Sub>();
c.list( b ); // error message as above
}
public static void main( String[] args) {
Generics g = new Generics();
g.test();
}
}
除了将 list-methods 参数声明为 type 之外,还有其他方法 <? extends Base>
吗?