代码之家  ›  专栏  ›  技术社区  ›  Robert Lewis

我不能使用switch语句,它不能覆盖所有可能的情况

  •  1
  • Robert Lewis  · 技术社区  · 5 年前
    return degrees % 90 != 0? Optional.empty() : Optional.of( switch( degrees ) {
                case 0 -> NORTH;
                case 90 -> EAST;
                case 180 -> SOUTH;
                case 270 -> WEST;
                //default -> null;  is there something I can put here to make empty Optional?
            } );
    

    上面返回一个包含基数方向枚举的可选值。该代码先前已确保这些值仅为的4个可能值 degrees . 但IntelliJ IDEA不允许这样,抱怨 switch @SuppressWarnings SwitchStatementWithoutDefaultBranch ,但没用。

    似乎应该有一个注释允许这样做。

    2 回复  |  直到 5 年前
        1
  •  1
  •   Sweeper    5 年前

    Optional.ofNullable 会给你一个 Optional.empty() 如果你过去 null

    return Optional.ofNullable( switch( degrees ) {
                case 0 -> NORTH;
                case 90 -> EAST;
                case 180 -> SOUTH;
                case 270 -> WEST;
                default -> null;
            } );
    
        2
  •  1
  •   rzwitserloot    5 年前

    有两种不同的开关结构。switch表达式和switch语句。switch表达式非常新(在JDK中添加,嗯,14?不到两年前)。另一方面,switch语句的形式已经有25年以上的历史了。

    switch语句表单具有这样的属性:如果您没有涵盖所有情况,那么许多linting工具和ide将生成一个警告。

    然而,这是关键, .

    @SuppressWarnings 或任何其他可以设置为使intellij忽略规范要求的intellij设置。

    如果你说:但那不可能发生-好吧,编译器不知道,疯狂的事情可能会发生。充其量你会假设编译器会抛出一些东西,但是,好吧,规范说这不是它的工作方式。