我有 Java 19,我正在尝试对我创建的记录进行一些简单的模式匹配。然而,Java 给了我一个非常令人困惑的编译错误。这是我可以做的导致错误的最简单的例子。
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");
}
}
}
这是当我尝试运行/编译时它给我的错误。
$ java ExpressionTypeIsASubsetOfPatternType.java
ExpressionTypeIsASubsetOfPatternType.java:15: error: expression type Triple is a subtype of pattern type Triple
if (input instanceof Triple t)
^
1 error
error: compilation failed
令人惊讶的是,谷歌搜索这个错误没有显示任何有用的信息。我已经习惯了输入错误并立即发现问题。我想这是因为这个功能太新了。
无论如何,我能找到的最接近的是bug https://bugs.openjdk.org/browse/JDK-8260566这是相关的,但绝对不是我正在处理的同一问题。
最后,这是有关我的java版本的相关信息。
$ java --version
openjdk 19 2022-09-20
OpenJDK Runtime Environment (build 19+36-2238)
OpenJDK 64-Bit Server VM (build 19+36-2238, mixed mode, sharing)
$ javac --version
javac 19