1

所以我有两节课。类B扩展类A。我正在创建一个ArrayList包含类型的对象B,所以列表是类型的ArrayList<B>。我想ArrayListuseList输入参数类型为ArrayList<A>. 按理说,既然B是 的子类A,它可以在任何地方使用A,包括在这个应用程序中。

但是,编译器似乎不喜欢这样(请参阅下面代码中的错误消息)。ArrayList<B>在将它传递给方法时,我也尝试ArrayList<A>将其转换为,但那个也不起作用。

代码:

public class Test {
    private class A { }
    private class B extends A { }
    public static void useList(ArrayList<A> aList) { }

    public static void main(String[] args) {

        ArrayList<B> bList = new ArrayList<B>();

        /* "The method test(ArrayList<Test.A>) in the type Test
         * is not applicable for the arguments (ArrayList<Test.B>)" */
        useList(bList); 

        /* "Cannot cast from ArrayList<Test.B> to ArrayList<Test.A>" */
        useList((ArrayList<A>)bList);
    }
}

毫无疑问,我在做一些愚蠢的事情,所以任何建议都将不胜感激!

谢谢!

4

1 回答 1

3

只需声明一个带有扩展元素useList的类型参数:ArrayListA

public static void useList(ArrayList<? extends A> aList) { }
于 2012-07-22T23:13:59.110 回答