跳至主要內容

Switch表达式增强

Jin...大约 2 分钟

Switch表达式增强

1、示例一

该特性先后由JDK12的JEP 325: Switch Expressions(Preview)、JDK13的JEP 354: Switch Expressions (Preview)引入,并在JDK14的JEP 361: Sitch Expressions正式转正。

1.1、传统的方式 case中变量赋值示例

public class SwitchTest {

    private String name;
    private String alias;

    @BeforeEach
    public void jinTest() {
        name = "Jin";
    }
}
    /**
     * <h2>传统的方式 case中变量赋值示例</h2>
     */
    @Test
    public void demo1() {
        switch (name) {
            case "Jin":
                alias = "男性";
                break;
            case "JinX":
                alias = "女性";
                break;
            default:
                alias = "未知";
                break;
        }
        System.out.println(alias);
    }

输出结果

男性

1.2、jdk17 case中变量赋值示例

/**
 * <h2>JDK17 case 中变量赋值代码示例</h2>
 */
@Test
public void demo2() {
    alias = switch (name) {
        case "Jin" -> "男性";
        case "JinX" -> "女性";
        default -> "未知";
    };
    System.out.println(alias);
}

输出结果

男性

2、示例二

2.1、传统的方式 case中值匹配多个示例

/**
 * <h2>传统的方式 case中值匹配多个示例</h2>
 */
@Test
public void demo3() {
    switch (name) {
        case "Jin":
        case "Jin1":
            alias = "男性";
            break;
        case "JinX":
        case "JinX1":
            alias = "女性";
            break;
        default:
            alias = "未知";
            break;
    }
    System.out.println(alias);
}

输出结果

男性

2.2、jdk17 case中值匹配多个示例

/**
 * <h2>JDK17 case 中值匹配多个示例</h2>
 */
@Test
public void demo4() {
    alias = switch (name) {
        case "Jin", "Jin1" -> "男性";
        case "JinX", "JinX1" -> "女性";
        default -> "未知";
    };
    System.out.println(alias);
}

输出结果

男性

3、示例三

3.1、传统的方式 case中需要多行业务代码示例

/**
 * <h2>传统的方式 case需要多行业务代码示例</h2>
 */
@Test
public void demo5() {
    switch (name) {
        case "Jin":
            alias = "男性";
            System.out.println("多行代码示例1");
            break;
        case "JinX":
            alias = "女性";
            System.out.println("多行代码示例2");
            break;
        default:
            alias = "未知";
            System.out.println("多行代码示例3");
            break;
    }
    System.out.println(alias);
}

输出结果

男性

3.2、jdk17中 case中需要多行业务代码示例

@Test
public void demo6() {
    alias = switch (name) {
        case "Jin", "Jin1" -> {
            System.out.println("多行代码示例");
            yield "男性";
        }
        case "JinX", "JinX1" -> {
            System.out.println("多行代码示例2");
            yield "女性";
        }
        default -> {
            System.out.println("多行代码示例3");
            yield "未知";
        }
    };
    System.out.println(alias);
}

4、示例四

4.1、jdk17 case中支持对象的类型匹配示例

/**
 * <h2>JDK17 case 中支持对象的类型匹配示例</h2>
 */
@Test
public void demo7() {
    String patternMatchSwitch = getPatternMatchSwitch(name);
    System.out.println(patternMatchSwitch);
}

private String getPatternMatchSwitch(Object o){
    return switch (o) {
        case null -> "object is null";
        case Integer i -> "Integer";
        case Long l -> "Long";
        case Double d -> "Double";
        default -> "String";
    };
}

输出结果:

java: patterns in switch statements 是预览功能,默认情况下禁用。
  (请使用 --enable-preview 以启用 patterns in switch statements)
贡献者: Jin
你认为这篇文章怎么样?
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
评论
  • 按正序
  • 按倒序
  • 按热度