-2

我有这些课

class SuperParent {
        @Override
        public String toString() {

            return "SuperParent";
        }
    }

    class A extends SuperParent {

        @Override
        public String toString() {

            return "A";
        }
    }

    class B extends SuperParent {

        @Override
        public String toString() {

            return "B";
        }

    }

我想要一个ListArrayLists ,所以我可以添加到我试过的 B 和 A 的 ArrayList

List<ArrayList<?extends SuperParent>> mList = new ArrayList<ArrayList<SuperParent>>();

但不编译

当我尝试这个时,

ArrayList<ArrayList<SuperParent>> mList = new ArrayList<SuperParent>>();

它编译但我不能添加ArrayListsAArrayLists Bs

我也了解 java 类型和继承,但是当谈到泛型时,我想念它。任何参考或声明都会对我有所帮助。

4

2 回答 2

1

这是您声明列表列表的方式,其中外部列表​​的元素可以是 A 列表或 B 列表:

ArrayList<ArrayList<? extends SuperParent>> lists = 
    new ArrayList<ArrayList<? extends SuperParent>>();
lists.add(new ArrayList<A>(Arrays.asList(new A(), new A())));
lists.add(new ArrayList<B>(Arrays.asList(new B(), new B())));

通常,在声明或接受作为方法参数时,建议使用接口类型而不是具体类型。这样,上面的代码片段将如下所示:

List<List<? extends SuperParent>> lists = 
    new ArrayList<List<? extends SuperParent>>();
lists.add(Arrays.asList(new A(), new A()));
lists.add(Arrays.asList(new B(), new B()));
于 2012-09-03T15:56:30.797 回答
0

我不知道你到底尝试了什么,但这对我有用:

public class SuperParent
{

@Test
public void testThatAddThowsNoExceptions()
{
    List<ArrayList<? extends SuperParent>> mList = new ArrayList<ArrayList<? extends SuperParent>>();
    ArrayList<SuperParent> firstList = new ArrayList<SuperParent>();
    firstList.add(new SuperParent());
    firstList.add(new A());
    firstList.add(new B());
    mList.add(firstList);
}

public String toString()
{

    return "SuperParent";
}

class A extends SuperParent
{

    @Override
    public String toString()
    {

        return "A";
    }
}

class B extends SuperParent
{

    @Override
    public String toString()
    {

        return "B";
    }

}

}
于 2012-09-03T15:59:13.450 回答