0

我 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>吗?

4

1 回答 1

3

以下是2种方法来做到这一点......

public void list(List<? extends Base> list){

}

或者

public <T extends Base> void list(List<T> list){

}
于 2012-09-24T16:30:28.097 回答