有没有一种方法可以通过IntelliJ重构Set初始化以使用Set.of()?

时间:2019-12-03 15:43:40

标签: java intellij-idea java-9

是否有一种方法可以在IntelliJ中(甚至在Eclipse中)进行重构,以将第一个脚本转换为第二个脚本:

在Java 9之前设置初始化:

Set<String> values = new HashSet<>();
values.add("a");
values.add("b");

从Java 9开始的集合初始化(创建不可变集合):

Set<String> values = Set.of("a", "b");

1 个答案:

答案 0 :(得分:1)

重构选项可能并非在所有情况下都可用(源集应该不可修改)。

但是IntelliJ的inspections可能更适合于检测这种情况。

请参见 Java> Java语言级迁移帮助> Java 9 不可更改的集合创建可以用集合工厂调用代替

  

此检查有助于转换创建的不可修改的收藏集   在Java 9之前使用新的集合工厂方法,例如List.of或   Set.of。另外,由于Java 10可以转换为List.copyOf等   被建议。

     

请注意,Java 9集合工厂方法不会   接受空值。还需要设置元素和映射键   不同。并非总是可以静态检查是否   原始元素不同,并且不为null。使用复选框   仅当原始元素为   编译时常量,因此可以保证转换正确。

     

此检查仅从Java 9开始可用。
   2017.2的新功能

可以使用以下代码测试此检查:

Set<String> stringSet = Collections.unmodifiableSet(new HashSet<>(Arrays.asList("a", "b", "c")));