我使用的是Java 17.

下面的代码显示了一个编译错误:

DomainFailure.DomainError cause = new InvalidReferenceTransactionIdError(TransactionId.of(UUID.randomUUID().toString()));
String message = switch (cause) {
    case InvalidReferenceUniqueIdentifierError e -> e.referenceUniqueIdentifier().toString();
    case InvalidReferenceTransactionIdError e -> e.transactionId().toString();
};

我的records:

public record InvalidReferenceUniqueIdentifierError(ReferenceUniqueIdentifier referenceUniqueIdentifier)
        implements DomainFailure.DomainError {
}

public record InvalidReferenceTransactionIdError(TransactionId transactionId)
        implements DomainFailure.DomainError {
}

domainFailre.domainError表示:

public sealed static interface DomainError permits DomainReferenceFailure.InvalidReferenceTransactionIdError,
        DomainReferenceFailure.InvalidReferenceUniqueIdentifierError {
}

目前,我收到了这个编译消息:

令牌"e"上出现错误,删除此令牌

我不知道我做错了什么.

有什么 idea 吗?

推荐答案

正如其他人在 comments 中指出的那样,Java 17只包含了switch(JEP 406)的模式匹配作为预览特性.为了能够在Java 17下使用它,你需要compile and run你的应用程序带有--enable-preview标志(以及编译时的--release 17标志).

或者,切换到Java 21(或更高版本),因为在那里特性最终确定为JEP 441,不再需要--enable-preview来编译和运行.注意Java 17(JEP 406)和Java 21(JEP 441)的最终语法之间有语法变化.

也就是说,当我用Java 17编译代码时(不使用--enable-preview),我得到了以下错误,而不是你提到的错误:

Main.java:6: error: patterns in switch statements are a preview feature and are disabled by default.
            case InvalidReferenceUniqueIdentifierError e -> e.referenceUniqueIdentifier().toString();
                 ^
  (use --enable-preview to enable patterns in switch statements)
1 error

因此,您可能甚至没有使用Java 17,或者这可能是您的IDE而不是Java产生的错误.

Java相关问答推荐

Java 8 RDX-如何设置单个选项卡标题文本的 colored颜色

如何在Javascript中设置文本区域圆角的样式

如何使用jooq generator将表名和列名映射为人类可读的?

使用标记时,场景大纲不在多个线程上运行

Java Swing:初始化身份验证类后未检测到ATM_Interface键事件

Exe4j创建的应用程序无法再固定在任务栏Windows 11上

在Java中,如何按一个属性升序,然后按另一个属性降序对对象列表进行排序?

Spark忽略Iceberg Nessie目录

按属性值从流中筛选出重复项

MySQL数据库中未应用具有Spring数据的唯一约束

如何在一行中使用Dijkstra中的Java Stream

如果按钮符合某些期望,如何修改它的文本?

S数学.exp的相同错误保证也适用于StrictMath.exp吗?

判断重复的两个二维表算法?

我该如何为我的类编写getter和setter方法?

接受类及其接口的Java类型(矛盾)

根据应用程序 Select 的语言检索数据

由于版本不匹配,从Java 8迁移到Java 17和Spring 6 JUnit4失败

如何使用stream.allMatch()为空流返回false?

双对象供应商