实例化时如何编写ArrayList?

时间:2018-04-16 22:24:35

标签: java arraylist instances

可能我是盲人或其他什么,但我似乎无法弄清楚如何做到以下几点:

我有一个名为Shopping的类,其构造函数如下:

Shopping shopping = new Shopping(String name, ArrayList <Shop> shops)

Shop类是4种子商店的超类,它的构造函数是这样的:

Shop shop = new Shop(String name, double area, double income)

我的问题是:在创建Shopping实例时,我不知道在构造函数的Array列表部分写什么,就像我可以创建一个

Shopping s1 = new Shopping("ABCDE", ?????? <- but don't know what to write here!!!)

任何帮助?

4 个答案:

答案 0 :(得分:1)

简短的回答是你需要传递一个你声明的类型的实例。如果该类型为ArrayList<Shop>,那么您需要将其中一个传递给它。例如,您可以使用`new ArrayList()&#39;创建其中一个,或者您可能有一些构建此类列表的代码,或者甚至已经有一个代码,因为它正在使用商店列表执行其他操作。

然而,你已经说过它必须是ArrayList,才能让自己陷入困境。您应该只声​​明它采取一个列表,并且只有商店的顺序很重要。如果订单不重要,那么只需声明Collection<Shop>即可。始终声明您的参数尽可能不具体。如果它是一个收藏品,那么碰巧手里拿着Set<Shop>的人可以将它传递给你,它会正常工作。

答案 1 :(得分:1)

说明

使用

创建对象的新实例
ArrayList<Shop> shops = new ArrayList<>();

然后你添加你的东西

shops.add(firstShop);
shops.add(secondShop);

然后你只需将变量传递给方法

Shopping s1 = new Shopping("ABCDE", shops);

或者,如果您想传递一个空列表,您只需在一行中执行

Shopping s1 = new Shopping("ABCDE", new ArrayList<>());

其他清单

是否有特殊原因需要将方法限制为ArrayList s?不会List也足够吗?如果你调整它也可以传递其他列表并使用Java 9,有一种简单的方法可以快速创建列表:

List<Shop> shops = List.of(firstShop, secondShop);
Shopping s1 = new Shopping("ABCDE", shops);

甚至更紧凑:

Shopping s1 = new Shopping("ABCDE", List.of(firstShop, secondShop));

答案 2 :(得分:1)

两种可能性。如果您之前创建了一些商店:

Shop subShop = new Shop("Subway", 2000, 4000);
Shop bookShop = new Shop("B&N", 8000, 9000);

列表:

ArrayList<Shop> shops = new ArrayList<>();
shops.add(subShop);
shops.add(bookShop);

然后你可以像这样创建它:

Shopping shopping = new Shopping("Plaza", shops);

但是,我会更改Shopping以取List(甚至是Collection,如Zag指出的那样),而不是ArrayList,在这种情况下你可以这样做:

Shopping shopping = new Shopping("Plaza", List.of(subShop, bookShop));

如果您将Shop构造函数调用到List::of的调用中,您甚至可以将其全部写在一行中。

答案 3 :(得分:1)

Shopping shopping = new Shopping(name, new ArrayList<>());

或者如果您想要一个已经包含一些项目的列表:

List<Shop> shops = new ArrayList<>();
shops.add(new Shop(...));
shops.add(new Shop(...));
Shopping shopping = new Shopping(name, shops);

如果您愿意,也可以在一行中执行此操作:

Shopping shopping = new Shopping(name, Arrays.asList(new Shop(...), new Shop(...)));