在实例化 List的不同方法之间做出决定foo 来自 fooService.getFoos()

发布于 2024-09-24 21:38:16 字数 305 浏览 2 评论 0原文

如果 fooService.getFoos() 返回 List

那么你可以这样写:

List<Foo> fooList = fooService.getFoos();

或者这样:

List<Foo> fooList = new ArrayList(fooService.getFoos());

这两种方法生成的 fooList 是否有显着差异?

If fooService.getFoos() returns List<Foo>.

then you can write this:

List<Foo> fooList = fooService.getFoos();

or this:

List<Foo> fooList = new ArrayList(fooService.getFoos());

Is there any significant difference in the resulting fooList between these two approaches?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

喜你已久 2024-10-01 21:38:16

是的 - 您正在创建一个全新的 List,其中包含原始列表的元素。您正在内存中复制集合,并从头到尾迭代它。您也没有使用该服务提供的实例,并且无法修改原始实例。最后,您省略了第二个片段中的泛型声明。

所以使用第一个选项。

更新:您表示您无权修改原始列表。这实际上是 fooService 的问题,而不是其客户端的问题。如果服务也在您的控制范围内,则返回Collections.unmodifyingList(originalList) - 因此客户端将无法执行修改操作(尝试时将抛出异常)

Yes - you are creating a completely new List, containing the elements of the original one. You are duplicating the collection in memory, and iterating it from start to end. You are also not using instance provided by the service, and you can't modify the original. And finally, you've omitted the generics declaration in the 2nd snippet.

So use the first option.

Update: you indicated you are not allowed to modify the original list. This is actually a problem of fooService, not of its clients. If the service is also in your control, return Collections.unmodifiableList(originalList) - thus clients won't be able to perform modification operations (on attempt an exception will be thrown)

独自←快乐 2024-10-01 21:38:16

第二个并不是一个好主意,因为您省略了通用部分。

但主要问题是调用不必要的代码。您可以查看 ArrayList 代码源,您将看到构造函数中使用的所有操作。如果您只需要一个列表,并且 fooService.getFoos() 返回一个有效的列表,那么您应该坚持使用它。

这两个语句的结果或多或少是相同的,除非:

  • 稍后您检查列表是否是 ArrayList 的实例并对其进行强制转换,但让我们面对现实吧,您将声明 ArrayList< ;Foo> 如果是这样的话。
  • fooService.getFoos() 返回的列表不应被修改(出于任何原因),但您仍然希望修改您这边的列表中的元素(而不影响原始列表)。

资源:

The second isn't really a good idea because you omit the generic part.

But the main problem is the unnecessary code which will be called. You can look at the ArrayList code source, and you'll see all the operations used in the constructor. If you only need a List, and fooService.getFoos() returns a valid List, you should stick with it.

The result of those two statement will be more or less the same unless:

  • later you check if your list is an instance of ArrayList and cast it, but let's face it, you would have declared ArrayList<Foo> if it was the case.
  • the list returned by fooService.getFoos() shouldn't be modified (for any reason) but you still want modify elements in the List on your side (without affecting the original list).

Resources :

微凉徒眸意 2024-10-01 21:38:16

我会坚持第一个,因为它比第二个读起来更容易并且更有意义。

I'd stick with the first one just because it reads lots easier and makes much more sense than the second one.

慕巷 2024-10-01 21:38:16

在第二个语句中,它仅返回 List 类型。如果您确定方法返回相同类型的书房,您可以使用第一种类型。

In the second statement it returns only of List type. If you are sure of method returning of same type den you can use firs type.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文