如果fooService.getFoos()
返回List<Foo>
。
然后你可以这样写:
List<Foo> fooList = fooService.getFoos();
或者这个:
List<Foo> fooList = new ArrayList(fooService.getFoos());
这两种方法之间产生的fooList
是否存在显着差异?
答案 0 :(得分:1)
第二个并不是一个好主意,因为你省略了通用部分。
但主要问题是将要调用的不必要的代码。您可以查看ArrayList
代码源,您将看到构造函数中使用的所有操作。如果您只需要一个List,并且fooService.getFoos()
返回一个有效的List,那么您应该坚持使用它。
这两个陈述的结果大致相同,除非:
ArrayList
的实例并进行投射,但让我们面对它,如果是这样的话,你会声明ArrayList<Foo>
。fooService.getFoos()
返回的列表不应该被修改(出于任何原因),但是你仍然需要修改列表中的元素(不影响原始列表)。资源:
答案 1 :(得分:1)
是的 - 您正在创建一个全新的List
,其中包含原始元素。您正在复制内存中的集合,并从头到尾迭代它。您也没有使用该服务提供的实例,也无法修改原始实例。最后,您已在第二个代码段中省略了泛型声明。
所以使用第一个选项。
更新:您表示不允许修改原始列表。这实际上是fooService
的问题,而不是客户的问题。如果服务也在您的控制范围内,则返回Collections.unmodifiableList(originalList)
- 因此客户端将无法执行修改操作(尝试时将抛出异常)
答案 2 :(得分:0)
我坚持使用第一个,因为它比第二个更容易阅读并且更有意义。
答案 3 :(得分:0)
在第二个语句中,它仅返回List类型。如果你确定方法返回相同类型的den,你可以使用第一种类型。