大家好,这是我在该博客上发表的有关Java 9功能的第一篇文章,今天您将了解我最喜欢的功能“收集的工厂方法” ,它是JEP 269的一部分。JEP代表JDK增强建议。 如果您曾经在Groovy或Kotlin工作过,那么您就会知道使用集合文字使用元素创建列表很容易,例如创建1、2、3的列表,您只需编写val items = listOf(1, 2, 3)
。 不幸的是,Java尚不支持它,但是JDK 9中的工厂收集方法已经改进了一切,并且几乎就是这样。 JDK在基本的Collection接口上添加了诸如of()
类of()
静态工厂方法 ,您可以使用它们来创建项目列表。
尽管Project Jigsaw或Java Module系统是Java 9发行版的主要亮点,但从开发的角度来看,还有其他一些有用的功能更有用,例如流程API附魔,Stream API增强以及Optional
类的一些有用方法,但是我最喜欢的API更改是Collection的工厂方法。
就像在Kotlin , Scala或Groovy中一样,它允许您在一行中创建值的列表,集合和值的映射:
List<String> list = List.of("Java", "Kotlin", "Groovy");
但是,唯一要注意的是您可以创建不可修改或不可变的 List,Set或Map。
of()
静态工厂方法返回的List,Set或Map在结构上是不可变的,这意味着添加后就不能添加,删除或更改元素。
调用任何mutator方法将始终导致抛出UnsupportedOperationException
。 但是,如果所包含的元素本身是可变的,则可能导致Collection的行为不一致或它的内容似乎发生变化。
这与您在JDK 6或7中创建的不可修改列表相同,如下所示:
List<String> listOfString = new List<>();
listOfString.add("Java");
listOfString.add("Kotlin");
listOfString.add("Groovy");
listOfString.add("Scala");
listOfString = Collections.unmodifiableList(listOfString);
unmodifiableList()
方法返回的列表也不支持添加,删除或设置操作,如果调用它们,则抛出UnsupportedOperationException
。
两种代码之间的唯一区别是,更早的代码需要6行以上的代码才能创建不可变的Collection,例如不可变的List,Set或Map,但是现在您只需一行即可。
List接口上还有List.of()
多个重载版本,例如,允许您创建1到10个元素的不可变列表,以及允许您创建任意数量的元素的可变参数方法 。
Set.of(
)和Map.of()
方法也是如此。 这是在Java 9中创建不可变Set的示例:
Set<Integer> primes = Set.of(2,3,5,7);
您会看到您可以在一行中创建一个不可变的Set。 同样,要创建不可变Map,JDK 9提供了两种方法Map.of(K k1, V v1)
和Map.ofEntries()
通过使用这两种方法,您可以创建不可变条目的Map,例如
重载此方法可以创建最多10个键值对的映射,但是如果您需要更大的映射和更多的映射,则应使用Map.ofEntries()
方法。
顺便说一句,您知道如何实现此功能吗? 为何以前不可用? 如果查看JDK 9代码或Javadoc,则会发现此功能是通过在Java Collection框架的关键接口(例如List,Set和Map)上添加静态工厂方法来实现的。
在JDK 8之前这是不可能的,因为在接口上添加方法意味着破坏所有客户端,并且接口上不允许使用静态方法。 在Java 8上,事情发生了变化,在接口上引入了默认和静态方法 ,这为评估JDK API铺平了道路。
我希望将来会有更多类似的约定,使使用JDK API更加容易。
同样,使用这些工厂方法时,适用于使用不同集合的规则也将适用(正如您期望的那样)。 因此,创建Set时不能传递重复元素,因为Set不允许重复 。
同样,创建Map时不能传递重复键,因为Map不允许重复键。 如果这样做,则将IllegalArgumentException
同样,您不能将null值传递给collection factory方法,如果这样做,请为Java异常NullPointerException
做好准备。
这就是如何在Java 9中创建不可变的列表,设置和映射的全部内容。 集合上的静态方法确实使使用Java集合API变得更容易,至少现在它类似于Kotlin或Groovy提供的东西。 JDK 9充满了这样有用的功能,请继续关注此博客上的更多此类文章。
您可能喜欢的其他Java和编程文章
- Java开发人员在2018年应该学习的10件事
- 20个Java开发人员必备库
- Java程序员可以在2018年阅读的20本书
- 十大Java 9教程和课程–最好的
- 5个免费的Spring和Spring启动在线学习课程
- Java和Web开发人员的10个框架
- 简单的Java 9新功能-概述(免费课程)
感谢您到目前为止阅读本文。 如果您喜欢此Java 9功能,请与您的朋友和同事分享。 如果您有任何问题需要反馈,请留下注释。
翻译自: https://www.javacodegeeks.com/2018/02/java-9-example-factory-methods-collection-creating-unmodifiable-list-set-map.html