java9新特性-12-集合工厂方法:快速创建只读集合

1.官方Feature

269: Convenience Factory Methods for Collections


2.产生背景

要创建一个只读、不可改变的集合,必须构造和分配它,然后添加元素,最后包装成一个不可修改的集合。

比如:

缺点:我们一下写了五行。即:它不能表达为单个表达式。

当然,我们也可以稍微简单点处理:


3.使用说明

Java9因此引入了方便的方法,这使得类似的事情更容易表达。

List firsnamesList= List.of(“Joe”,”Bob”,”Bill”);

调用集合中静态方法of(),可以将不同数量的参数传输到此工厂方法中。此功能可用于Set和List,也可用于Map的类似形式。此时得到的集合,是不可变的:在创建后,继续添加元素到这些集合会导致 “UnsupportedOperationException” 。

由于Java 8中接口方法的实现,可以直接在List,Set和Map的接口内定义这些方法,便于调用。


4.使用举例


作者:尚硅谷面试官宋红康链接:https://www.jianshu.com/p/9660482286d4來源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

原文地址:https://www.cnblogs.com/wzlbigdata/p/8278394.html

时间: 2024-10-09 13:35:46

java9新特性-12-集合工厂方法:快速创建只读集合的相关文章

Java9新特性

Java9前几天已经发布了,在此罗列下它的主要特性 1.Java模块系统 JDK9的核心变化就是引入了一种新的Java编程组件,也就是模块.按照Oracle的说法,它是一个可命名的.自描述的代码和数据集合.模块技术的核心目标是减少Java应用和Java核心运行时环境的大小与复杂性.为此,JDK本身进行了模块化,Oracle希望通过这种方式提升性能.安全性和可维护性. 为了支持Java 9的模块,引入一种新的模块化JAR文件形式,按照这种形式会在其根目录中包含一个module-info.class

跟着实例学习设计模式(3)-工厂方法(创建型)

工厂方法属于创建型设计模式. 设计意图:定义一个用于创建对象的接口.让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类. 静态工厂使用面向对象的方式,有效的攻克了添加新产品给client和实现类带来的代码改动问题.封装了创建过程,减低了添加新产品带来的代码改动错误.可是新增功能须要改动client代码和工厂创建类的推断逻辑,这种设计违背了开放-封闭原则.对扩展开放.对改动封闭,那我们就须要找一种方式避免添加新的功能时改动工厂创建方法的逻辑.(毕竟会对原有代码做改动难免会有失误) 工厂

使用ReadOnlyCollection创建只读集合

转载:http://www.cnblogs.com/abatei/archive/2008/02/04/1064102.html 使用泛型创建只读集合 问题 您希望类中的一个集合里的信息可以被外界访问,但不希望用户改变这个集合. 解决方案 使用ReadOnlyCollection<T>包装就很容易实现只读的集合类.例子如,Lottery类包含了中奖号码,它可以被访问,但不允许被改变: public class Lottery    {        // 创建一个列表.        List

42.C#--集合的使用,创建一个集合,里面添加一些数字,求平均值与和,以及最大值,最小值

static void Main(string[] args){//42.集合的使用,创建一个集合,里面添加一些数字,求平均值与和,以及最大值,最小值//创建一个集合ArrayList list = new ArrayList();//向集合添加一些数字list.AddRange(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 });//新建sum变量来存储和int sum = 0;//新建一个max来存储最大值int max = (int)list[0];//新建一

Java 8新特性之旅:使用Stream API处理集合

在这篇“Java 8新特性教程”系列文章中,我们会深入解释,并通过代码来展示,如何通过流来遍历集合,如何从集合和数组来创建流,以及怎么聚合流的值. 在之前的文章“遍历.过滤.处理集合及使用Lambda表达式增强方法”中,我已经深入解释并演示了通过lambda表达式和方法引用来遍历集合,使用predicate接口来过滤集合,实现接口的默认方法,最后还演示了接口静态方法的实现. 源代码都在我的Github上:可以从 这里克隆. 内容列表 使用流来遍历集合. 从集合或数组创建流. 聚合流中的值. 1.

Java9新特性之——JShell

java9已经在北京时间9月22日正式发布,开发者可以在oracle jdk官网上下载到最新的jdk9.jdk9和jdk8中的新特性不同:jdk8中的stream和lambda表达式能够让开发者非常快速和直观地感受到新版本的功能特性,而java9中的关键更新--模块化,相比而言不能让开发者有直观的感受. 今天首先带来的是java9中直观的新特性:JShell.关于更多jdk9特性的介绍可以参照infoq的一篇文章:https://mp.weixin.qq.com/s/Onj9ZJYbV5pLTA

java9新特性-6-多版本兼容jar包

1.官方Feature 238: Multi-Release JAR Files 2.使用说明 当一个新版本的Java出现的时候,你的库用户要花费数年时间才会切换到这个新的版本.这就意味着库得去向后兼容你想要支持的最老的Java版本(许多情况下就是Java 6 或者 Java7).这实际上意味着未来的很长一段时间,你都不能在库中运用Java 9所提供的新特性.幸运的是,多版本兼容jar功能能让你创建仅在特定版本的Java环境中运行库程序选择使用的class版本. 举例1: jar root  

工厂方法(创建型)

工厂方法(Factory Method) 1.定义一个用于创建对象的接口,让子类决定实例化哪一个类.使一个类的实例化延迟到其子类. Client:作为开始节点 Game:抽象产品基类,做为具体的产品抽象类,所有同类的产品都继承它 Factory:抽象工厂基类,任何产品工厂必须继承 xxxGame:具体产品类,继承抽象产品基类,并实现,由工厂创建实例对象. xxxxFactory:具体的工厂类,用于创建产品实例 namespace 工厂方法 { class Program { static voi

java使用Arrays.asList快速创建List集合

程序中某段案例代码如下: Map<String, List<CronTrigger>> tMap = new HashMap<String, List<CronTrigger>>(); tMap.put(name, Arrays.asList(new CronTrigger[] { trigger })); 程序运行抛出异常:java.lang.UnsupportedOperationException 错误原因: 为了快速创建List而使用了Arrays.