在 switch 语句上使用 case default 返回“Switch 中的预览功能模式匹配仅适用于源级别 20 及以上”

问题描述 投票:0回答:2
package com.learningjava.conditionals;

public class SwitchExcercises {

    public static boolean isWeekDay(int dayNumber) {
        switch (dayNumber) {
        case 0:
        case 1:
        case 2:
        case 3:
        case 4:
            return true;
        case 5:
        case 6:
            return false;
        case default:
            return false;
        }
    }
}

我使用 Eclipse 作为我的 IDE。在默认情况下显示错误,说

The preview feature Pattern Matching in Switch is only available with source level 20 and above.

使用java-se 17。感谢您的帮助。

java switch-statement default
2个回答
3
投票

这是一个语法错误,您打算编写的代码实际上试图做一些与您预期完全不同的事情。您的语法错误意外地与名为“switch 表达式和语句的模式匹配”的全新 Java 功能重叠。 要修复错误,只需将

case default

切换为

default
case default:
    return false;

default: return false;

为了更好地解释错误消息,Eclipse IDE 知道新的 Java 功能,因此试图让您知道您正在做的事情看起来像新功能,并且如果您尝试执行新功能功能,您应该将代码级别升级到21或以上。

但是,当然,Eclipse 弄错了——您只需要一个默认子句。所以像我上面展示的那样写,错误就会消失。


1
投票

public static boolean isWeekDay(int dayNumber) { return switch (dayNumber) { case 0, 1, 2, 3, 4 -> true; case 5, 6 -> false; default -> false; }

甚至

return switch (dayNumber) { case 0, 1, 2, 3, 4 -> true; default -> false; }

因为这里的意图是“如果在 0..4 中则为 true,否则为 false”。

© www.soinside.com 2019 - 2024. All rights reserved.