可能我是盲人或其他什么,但我似乎无法弄清楚如何做到以下几点:
我有一个名为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!!!)
任何帮助?
答案 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(...)));