Java 21预览版try-with-resources用未命名符号报错咨询
问题分析与解决
你的用法本身没问题,但必须启用预览特性编译和运行——JEP443是Java 21的预览特性,默认处于禁用状态,这才是导致报错的核心原因。
错误根源
没开预览特性时,编译器无法正确解析var _这种未命名变量语法,编译生成的类文件里会出现非法的空名字段,JVM加载时自然会抛出ClassFormatError。
正确操作方式
编译和运行时都得加上预览特性参数:
- 编译命令:
javac --enable-preview --release 21 YourClass.java - 运行命令:
java --enable-preview YourClass
额外简化写法
如果完全不需要在代码里引用这个资源对象,JEP443还允许更简洁的写法,直接省略变量声明:
try (new FileInputStream("/Users/task/Desktop/ttt")) { // 你的业务逻辑 } catch (IOException e) { throw new RuntimeException(e); }
当然,这种写法同样需要启用预览特性才能正常编译运行。
内容的提问来源于stack exchange,提问作者kevin
相关产品推荐
相关产品推荐

