深圳外贸网站建设服务收费,iapp用网站做软件代码,视频互联网推广选择隐迅推,网站做com合net的区别jdk 1.8 不可变常量大约两个月前#xff0c; 斯图尔特马克斯 #xff08; Stuart Marks#xff09;写道#xff1a;“ 不变性就像葡萄酒 。” 然后#xff0c;他提醒读者注意叔本华的熵定律 #xff1a;“如果将一勺酒倒入装满污水的桶中#xff0c;就会产生污水。 如果… jdk 1.8 不可变常量 大约两个月前 斯图尔特·马克斯 Stuart Marks写道“ 不变性就像葡萄酒 。” 然后他提醒读者注意叔本华的熵定律 “如果将一勺酒倒入装满污水的桶中就会产生污水。 如果将一勺污水倒入装满葡萄酒的桶中就会产生污水。” 以此为背景马克将叔本华的熵定律应用于不变性用“不变性”代替“酒”用“可变性”代替“污水”以得出深刻见解 同样如果在可变的东西上增加一点不变性那么您将获得可变性。 而且如果在不可变的内容上添加一些可变性则会获得可变性。 此报价的上下文是自10月开始的在线讨论内容涉及以JDK 10为目标的JDK-8177290 “为不可修改的列表集合映射添加复制工厂方法”和JDK-8184690 “向未修改的列表集合添加收集器”和地图”。 JDK-8177290是JDK-8156070 “不可变集合增强”的子任务它被描述为“用于不可变集合的各种增强和改进子任务的容器”。 讨论时间很长涉及多种观点而且常常有截然不同的观点涉及诸如“不变”和“不可修改”之类的术语。 确实在讨论的第一篇文章中马克写道“涉及数据结构时术语“ 不可变 ”与“ 持久性 ”密不可分如果Java的“不可变”意味着某种意义我相信我们将永远对此进行解释。与其他人不同。” 最终确定要使用的术语的指针可以在与JDK-8191517相关的当前文本中找到 “为不可修改的列表集合映射添加复制工厂方法”。 本文包含以下陈述“为“视图”集合“不可修改”集合和“不可修改视图”集合提供定义。” JDK-8191517还参考了webrev.4.zip和specdiff.4.zip以获取其他低级详细信息。 这篇文章的其余部分将介绍那些引用的ZIP文件中记录的一些底层细节。 在引用的zip文件中添加到选择接口的源代码的Javadoc注释包含有关术语“ 视图集合 ”“ 不可修改的集合 ”和“ 视图 不可修改的集合 ”的其他详细信息。 例如用于java.util.Collection的Javadoc在其接口级Javadoc注释中添加了以下描述 “ 查看集合 ” –“大多数集合管理它们所包含元素的存储。 相反 视图集合本身不存储元素而是依靠后备集合来存储实际元素。 视图集合本身未处理的操作将委托给后备集合。” 关于修改“对后备集合所做的任何更改都可以在视图集合中看到。 “ 不可修改的集合 ” - “ 不可修改的Collection是一个集合其所有mutator方法......被指定抛出UnsupportedOperationException异常。 因此无法通过在其上调用任何方法来修改此类集合。 为了使一个集合正确地不可修改从该集合派生的任何视图集合也必须不可修改。” 关于修改“不可修改的集合不一定是不变的。 “ 修改视图集合 ” - “ 不可修改视图集合是一个集合是不可修改的并且也是一个视图在背衬集合。 如上所述它的mutator方法抛出UnsupportedOperationException}而将读取和查询方法委托给后备集合。 其结果是提供对后备集合的只读访问。” 关于修改“请注意对后备集合的更改仍然可能进行并且如果发生更改则可以通过不可修改的视图看到它们。 上面的项目符号详细介绍了添加到Javadoc中的java.util.Collection类的注释但是其他collection接口的Javadoc注释也具有与这些特定接口相关的不变性和不可修改性的重要新注释。 例如先前引用的ZIP文件中显示的java.util.List接口Javadoc注释讨论了“不可修改的列表”可用于访问此类List的便捷机制以及通过这些机制检索的List的特征。 java.util.Set和java.util.Map接口的Javadoc注释也得到类似处理。 到目前为止我主要集中于如何增强Javadoc文档以及如何将术语从“不变”更改为“不可修改”。 但是在这里值得指出的是术语的这种变化与新的“复制工厂方法”和新的收集器的添加有关这将使访问不可修改的收集变得更加容易。 JDK-8191517总结了这些新方法 “向java.util.List Set和Map添加一族copyOf()方法以复制现有集合或Map中的元素。” “将一组收集器添加到java.util.stream.Collectors 这些收集器将从流中创建不可修改的List Set或Map 。” 即将到来的Map.copyOf(Map)方法的Javadoc注释指出“返回包含给定Map条目的不可修改Map。 给定的Map不能为null并且不得包含任何null键或值。 如果随后修改了给定的地图则返回的地图将不会反映出这些修改。” Javadoc注释中有趣的但并不奇怪的“实施说明”指出“如果给定的Map是不可修改的Map则调用copyOf通常不会创建副本。” 使用Java 9添加到Map的众多重载Map.of方法均对其Javadoc注释进行了修改以将“ immutable”替换为“ unmodifiable”并将对“ Immutable Map Static Factory Methods ”部分的引用替换为对新名称的引用。该部分的内容“不可修改的地图”。 术语“结构上不变的”也已由“不可修改的”代替。 该Set.copyOf(Collection)和List.copyOf(Collection)来的Java 10方法类似于在最后一段描述Map.copyOf(Map)其中包括在评论术语所提到的相同的更改Map 。 JDK-8191517对Java 10中的Collectors类的补充是toUnmodifiableList() toUnmodifiableSet()的四个方法以及toUnmodifiableMap(-)两个重载版本一个版本接受BinaryOperator参数。 随着人们越来越普遍地实现不变性的优点并且随着Java开发人员努力在其应用程序中更频繁地应用不变性通常重要的是准确地知道如何修改给定的结构集合或视图。 JDK 10计划添加更多方法以使Java开发人员更容易实现集合的不变性或至少不可修改并且对最重要的接口和Collections类的注释应有助于开发者更清楚地了解可变的内容以及在为其应用程序选择的构造中哪些是不可变的。 翻译自: https://www.javacodegeeks.com/2018/01/immutable-versus-unmodifiable-jdk-10.htmljdk 1.8 不可变常量