这篇文章继续了My My Java 9 Features博客文章中对Java9功能的探索。 在这里,我们在List,Set和Map接口中试验Java9 Collections静态工厂方法。

集合静态工厂方法

Java9使用其新的静态工厂方法使创建不可变列表更加容易

有12种Set.of和List.of方法–

  • List.of()或Set.of()
  • List.of(E e1)或Set.of(E e1)至E e10
  • List.of(E…元素)或Set.of(E…元素)

例子

jshell> Set.of()
$1 ==> []
| created scratch variable $1 : Set<Object>

注意将推理作为List对象

要静态

清单

(E e1,E e2,E e3)的–

jshell> List.of("one","two","three")
$2 ==> [one, two, three]
| created scratch variable $2 : List<String>

将推理记录为列表

宾语

参数的数量一直增加到E e10,此时我们可以使用vararg –

静态的

清单

(E ...个元素)

同样,地图定义–

  • staticMapof()
  • staticMapof(K k1,V v1)到(K k10,V v10)
  • staticMapofEntries(Map.Entry
    …条目)–注意使用
    地图条目

例子

jshell> Map.of()
$12 ==> {}jshell> Map.of("key1", "value1", "key2", "value2")
$13 ==> {key1=value1, key2=value2}
| created scratch variable $13 : Map<String,String>

集合静态工厂方法的特征

这些静态工厂方法列表,集合和映射的共同特征是–

  • 从结构上讲是不可变的-尽管元素本身是不可变的,但抛出UnsupportedOperationException
jshell> Set<String> immutableSet = Set.of("one","two","three")
immutableSet ==> [three, two, one]
| created variable immutableSet : Set<String>jshell> immutableSet.add("four")
| java.lang.UnsupportedOperationException thrown:
  • 没有空-抛出NullPointerException
jshell> List<Object> notNullList = List.of(null)
| Warning:
| non-varargs call of varargs method with inexact argument type for last parameter;
| cast to java.lang.Object for a varargs call
| cast to java.lang.Object[] for a non-varargs call and to suppress this warning
| List<Object> notNullList = List.of(null);
| ^--^
| java.lang.NullPointerException thrown:
| at List.of (List.java:1030)
| at (#10:1)
  • 序列化–如果元素可序列化,则序列化

列出特定特征

  • 订单–订单与元素输入保持相同
jshell> List<String> immutableList = List.of("one","two","three")
immutableList ==> [one, two, three]
| created variable immutableList : List<String>

设置特定特征

  • 拒绝重复–集合还将在创建时使用IllegalArgumentException拒绝重复–
jshell> Set.of("one","one")
| java.lang.IllegalArgumentException thrown: duplicate element: one

地图特定特征

  • 拒绝重复的Keus –映射将拒绝具有IllegalArgumentException的重复键–
jshell> Map.of("key1", "value1", "key1", "value2")
| java.lang.IllegalArgumentException thrown: duplicate key: key1
| at ImmutableCollections$MapN.<init> (ImmutableCollections.java:680)
| at Map.of (Map.java:1326)
| at (#15:1)
  • 也不保证迭代

结论

这些是用于创建不可变集合的有用且快速的方法,而jshell为了解新方法及其相关特性提供了良好的测试基础。

翻译自: https://www.javacodegeeks.com/2017/10/java-9-jshell-examples-collections-static-factory-methods.html

Java 9 JShell示例:集合静态工厂方法相关推荐

  1. java 静态缓存示例_Java 9 JShell示例:集合静态工厂方法

    java 静态缓存示例 这篇文章继续从My My Java 9 Features博客文章中探索Java9功能. 在这里,我们在List,Set和Map接口中试验Java9 Collections静态工 ...

  2. 小鸡爪读Effective Java记录1:用静态工厂方法代替构造器

    //小鸡爪 == 菜鸡 遇到多个构造器参数时要考虑使用构建器 Preface 静态工厂和构造器有个共同的局限性:它们都不能很好地扩展到大量的可选参数.比如用一个类表示包装食品外面显示的营养成分标签.这 ...

  3. 使用静态工厂方法而不是构造器

    注意:静态工厂方法不是设计模式中的工厂方法. 一个类向客户端提供静态工厂方法有如下好处: 有名称,不用根据参数类型和顺序区分重载方法,让代码更易读 是否每次调用都需要新对象是可控制的,对于不可修改的对 ...

  4. 第一条:考虑用静态工厂方法代替构造器

    转载链接:https://www.jianshu.com/p/ceb5ec8f1174 1.序:什么是静态工厂方法 在 Java 中,获得一个类实例最简单的方法就是使用 new 关键字,通过构造函数来 ...

  5. java 方法 示例_Java 9示例–收集的工厂方法–创建不可修改的列表,集合和映射...

    java 方法 示例 大家好,这是我在该博客上发表的有关Java 9功能的第一篇文章,今天您将了解我最喜欢的功能"收集的工厂方法" ,它是JEP 269的一部分.JEP代表JDK增 ...

  6. Java 9示例–收集的工厂方法–创建不可修改的列表,集合和映射

    大家好,这是我在该博客上发表的有关Java 9功能的第一篇文章,今天您将了解我最喜欢的功能"收集的工厂方法" ,它是JEP 269的一部分.JEP代表JDK增强建议. 如果您曾经在 ...

  7. Java 设计模式之静态工厂方法模式

    设计模式系列 创建型设计模式 Java 设计模式之单例模式 Java 设计模式之静态工厂方法模式 Java 设计模式之工厂方法模式 Java 设计模式之抽象工厂模式 Java 设计模式之Builder ...

  8. Java 静态工厂方法详解

    Java 静态工厂方法详解 本文章主要是对<Effective Java>对静态工厂方法的理解 第一次使用静态工厂方法是在HIT<Software Construction>课 ...

  9. 《Effective Java》读书笔记 Item 1:考虑静态工厂方法,而不是构造器

    众所周知,要想能获取一个类的实例,该类得要提供一个public的构造器.但是<Effective Java>书中说还有一个方法,那就是提供静态工厂方法(static factory met ...

最新文章

  1. 事件绑定及解除事件绑定
  2. mysql mmm 主主_Microsoft Azure部署MYSQL-MMM(2)配置主主复制
  3. 第一次ScrumMeeting博客:团队任务分解
  4. android 开发不能创建目录
  5. C#中读取文件内容本文分步介绍了如何从文本文件
  6. Android 启动白屏,简单解决方法
  7. python 高级语言特性_Pytohon学习笔记(一)Python编程语言历史及特性
  8. 计算一个子网掩码有多少个有效ip地址_一个月有多少个工作日,你会计算了吗?...
  9. linux数组大小排序,Linux如何使用awk进行数组排序
  10. 旋转链表 Java,leetcode 旋转链表 Java
  11. 相关系数法程序设计 opencv C++ CSU
  12. git添加远程库遇到的问题
  13. 该更新一下你的密码字典了
  14. 为什么程序员会秃头?盘点程序员糟心的几大因素
  15. 云笔记横向评测:印象笔记、有道云笔记、为知笔记、OneNote、Notion
  16. python 匹配字符串中所有单词并返回下标,python返回字符下标
  17. 创文明城市在路上,信息报送有高招
  18. HTTP - get/post请求详解与本质区别总结
  19. 数据分析 — 用户粘性的两个计算指标(DAU/MAU和月人均活跃天数)
  20. ROK(万国觉醒)服务器卡顿解决方案

热门文章

  1. 汇编语言(七)之字符串转大写
  2. Redis 常用操作命令,非常详细
  3. JavaFX UI控件教程(五)之Radio Button
  4. 如何设计一个高可用的运营系统
  5. jQuery 基础教程 (三)之jQuery的选择器
  6. Java GC系列(1):Java垃圾回收简介
  7. 一步一步详解高斯日记
  8. ssh(Spring+Spring mvc+hibernate)——applicationContext-servlet.xml
  9. Android隐藏状态栏和标题栏
  10. win10硬盘修复工具使用教程