如何修复Set.of()报错cannot find symbol: method of(String,String)
报错原因
Set.of()是Java 9及以上版本才加入java.util.Set接口的静态工厂方法,当前编译环境使用的JDK版本低于Java 9时,接口中不存在该方法定义,就会抛出找不到符号的编译错误。
解决步骤
- 执行
javac -version命令查看当前环境默认的编译器版本,如果返回版本号为1.8及更早版本,直接升级本地JDK到Java 9及以上即可解决。 - 如果是Maven、Gradle这类构建工具管理的项目,除了检查本地JDK版本,还要确认构建配置中指定的源码编译版本、目标字节码版本是否被设置为Java 8及更低,配置和实际JDK版本不匹配也会触发该报错。
- 若受项目约束必须使用Java 8环境,无法升级JDK版本,可替换为Java 8兼容的写法实现相同效果:
import java.util.Arrays; import java.util.HashSet; import java.util.Set; import java.util.Collections; // 普通可修改Set Set<String> existedFieldsValueList = new HashSet<>(Arrays.asList("field1", "field2")); // 等效Set.of()的不可变Set Set<String> existedFieldsValueList = Collections.unmodifiableSet( new HashSet<>(Arrays.asList("field1", "field2")) );
补充说明:
Set.of()创建的是不可变集合,不支持add、remove等修改操作,且入参不允许传入null值,和普通HashSet的行为有细微差异,替换写法时注意匹配业务需求。
内容的提问来源于stack exchange,提问作者MusicalChicken
相关产品推荐
相关产品推荐

