Java 19中instanceof无条件模式是什么?预览警告解析
Java 19中instanceof无条件模式匹配的预览警告解析
我正在使用Java 19,采用Java 16中引入的instanceof模式匹配,但遇到了一个难以理解的警告。
代码示例
public class ExpressionTypeIsASubsetOfPatternType { public record Triple(int a, int b, int c) {} public static void main(String[] args) { System.out.println("Java Version = " + System.getProperty("java.version")); final Triple input = new Triple(1, 2, 3); if (input instanceof Triple t) { System.out.println("Made it here"); } } }
编译警告信息
$ javac -Xlint:preview --enable-preview --release 19 UnconditionalPatternsPreviewWarning.java UnconditionalPatternsPreviewWarning.java:15: warning: [preview] unconditional patterns in instanceof are a preview feature and may be removed in a future release. if (input instanceof Triple t) ^ 1 warning
问题解析
什么是“无条件模式”
你代码中的input instanceof Triple t就是无条件模式:input的编译时类型已经是Triple,这意味着这个instanceof判断的结果永远为真,不存在匹配失败的可能。简单来说,当表达式的类型是模式类型的子集(或完全相同)时,这个模式就属于无条件模式。
为什么触发预览警告
虽然Java 16确实引入了基础的instanceof模式匹配并在后续版本中正式发布,但无条件模式匹配是作为扩展特性,在Java 19中以预览特性的形式新增的,并非初始特性的一部分。你之前认知的正式发布特性是“有条件的instanceof模式匹配”(比如用父类型变量匹配子类型模式),而无条件模式还处于预览阶段,因此编译时会触发该警告。
内容的提问来源于stack exchange,提问作者davidalayachew
相关产品推荐
相关产品推荐

