ImmutableList与List-我应该将其强制转换为什么?

先生

我知道将所有List实现都转换为会被普遍接受List无论它是一个变量,方法返回,或参数使用的方法ArrayListCopyOnWriteArrayList等。

List<Market> mkts = new ArrayList<>();

当我使用Guava时ImmutableList,我认为它可以说是该规则的例外(尤其是如果我在内部构建复杂的业务应用程序而不是公共API)。因为如果我将其强制转换为列表,那么不推荐使用的mutator方法将不再标记为不推荐使用。而且,它不再被标识为不可变的对象,这是其功能和身份的重要组成部分。

List<Market> mkts = ImmutableList.of(mkt1,mkt2,mkt3);

因此,将其作为ImmutableList权利传递是有意义的吗?我什至可以争辩说,内部API只接受的好策略ImmutableList,因此客户端的可变性和多线程不会破坏库中的任何内容。

ImmutableList<Market> mkts = ImmutableList.of(mkt1,mkt2,mkt3);

我知道自己有被ImmutableList过时的风险,而Oracle决定创建自己的一天ImmutableList将需要大量重构。但是,是否有理由认为维持ImmutableList演员阵容的利弊大于弊?

斯蒂芬·C

我同意你的理由。如果您正在使用Guava集合库,并且您的列表是不可变的,则最好将它们传递给您ImmutableList

然而:

我知道ImmutableList本身有被弃用的风险,而Oracle决定创建自己的ImmutableList的那一天将需要大量的重构。

第一种情况似乎不太可能,但是每当您使用任何第三方库时,您都将承担风险但是,不利的一面是,如果应用程序(谷歌)无意中弃用了您依赖的类或方法,则可以选择不升级应用程序的Guava版本。

更新

Louis Wasserman(为Google工作)在评论中说:

“ Guava为非@Beta API提供了非常强大的兼容性保证。”

因此,我们可以减少不必要的API更改的可能性。


第二种情况更不可能发生(IMO)。而且您可以确定,如果Oracle确实添加了不可变的列表类或接口,则不需要您进行重构。Oracle会尽力避免在增强标准API时破坏现有代码。

但是话虽如此,您实际上要权衡利弊...以及最终结果时如何应对。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么我应该将List转换为Array

来自分类Dev

为什么不能将List <decimal>强制转换为List <int>?

来自分类Dev

为什么要将List转换为Array

来自分类Dev

为什么在ReadOnlyCollection上使用ImmutableList?

来自分类Dev

Spring-Data JPA CrudRepository返回Iterable,可以将其强制转换为List吗?

来自分类Dev

将Array,List,IEnumerable,CustomList类强制转换为1并迭代将其抛出

来自分类Dev

为什么我必须强制转换为界面?

来自分类Dev

从List <MyClass>强制转换为List <Interface>

来自分类Dev

为什么Scala将Seq转换为List?

来自分类Dev

我的ImmutableList Collector无法正常工作?

来自分类Dev

什么保证番石榴的ImmutableList的线程安全?

来自分类Dev

将List <ViewModel>强制转换为ViewModel?

来自分类Dev

为什么将其强制转换为结构指针而不是编译时常量?

来自分类Dev

为什么在将其强制转换为void *类型之前需要复制Objective-C处理程序?

来自分类Dev

当我尝试将对象强制转换为List <Object>时发出警告

来自分类Dev

当我尝试将对象强制转换为List <Object>时发出警告

来自分类Dev

为什么我的tableadaptor强制在日期列上强制转换为字符串

来自分类Dev

为什么我们必须将 Collectors.toList() 返回的 List 转换为 List<Integer> 即使 Stream 的元素已经映射到 Integer?

来自分类Dev

将List <Object>强制转换为List <Map <String,Object >>

来自分类Dev

如何将List << MyClass>强制转换为List <T>?

来自分类Dev

将List对象强制转换为扩展List的新对象

来自分类Dev

如何将List << MyClass>强制转换为List <T>?

来自分类Dev

为什么Jackson2JsonMessageConverter将List <String>转换为List <Object>

来自分类Dev

Java泛型-强制转换为List <SomeType>会发出未经检查的强制转换警告,而不能强制转换为SomeType

来自分类Dev

在C语言中,为什么我们需要将char *强制转换为void?

来自分类Dev

为什么显式运算符bool让我强制转换为ANY基本类型?

来自分类常见问题

为什么强制转换为int给我8而不是0?

来自分类Dev

为什么我没有收到将指针强制转换为int的警告?

来自分类Dev

C数组数组:为什么我需要在此处强制转换为const?

Related 相关文章

  1. 1

    为什么我应该将List转换为Array

  2. 2

    为什么不能将List <decimal>强制转换为List <int>?

  3. 3

    为什么要将List转换为Array

  4. 4

    为什么在ReadOnlyCollection上使用ImmutableList?

  5. 5

    Spring-Data JPA CrudRepository返回Iterable,可以将其强制转换为List吗?

  6. 6

    将Array,List,IEnumerable,CustomList类强制转换为1并迭代将其抛出

  7. 7

    为什么我必须强制转换为界面?

  8. 8

    从List <MyClass>强制转换为List <Interface>

  9. 9

    为什么Scala将Seq转换为List?

  10. 10

    我的ImmutableList Collector无法正常工作?

  11. 11

    什么保证番石榴的ImmutableList的线程安全?

  12. 12

    将List <ViewModel>强制转换为ViewModel?

  13. 13

    为什么将其强制转换为结构指针而不是编译时常量?

  14. 14

    为什么在将其强制转换为void *类型之前需要复制Objective-C处理程序?

  15. 15

    当我尝试将对象强制转换为List <Object>时发出警告

  16. 16

    当我尝试将对象强制转换为List <Object>时发出警告

  17. 17

    为什么我的tableadaptor强制在日期列上强制转换为字符串

  18. 18

    为什么我们必须将 Collectors.toList() 返回的 List 转换为 List<Integer> 即使 Stream 的元素已经映射到 Integer?

  19. 19

    将List <Object>强制转换为List <Map <String,Object >>

  20. 20

    如何将List << MyClass>强制转换为List <T>?

  21. 21

    将List对象强制转换为扩展List的新对象

  22. 22

    如何将List << MyClass>强制转换为List <T>?

  23. 23

    为什么Jackson2JsonMessageConverter将List <String>转换为List <Object>

  24. 24

    Java泛型-强制转换为List <SomeType>会发出未经检查的强制转换警告,而不能强制转换为SomeType

  25. 25

    在C语言中,为什么我们需要将char *强制转换为void?

  26. 26

    为什么显式运算符bool让我强制转换为ANY基本类型?

  27. 27

    为什么强制转换为int给我8而不是0?

  28. 28

    为什么我没有收到将指针强制转换为int的警告?

  29. 29

    C数组数组:为什么我需要在此处强制转换为const?

热门标签

归档