JDK 14 새로운 기능 의 switch 표현 식 구현

5909 단어 JDK14switch
간단 한 소개
switch 의 새로운 기능 은 유구 한 역 사 를 가지 고 있 습 니 다.JDK 12 에서 미리 보기 기능 으로 도입 되 었 고 최종 적 으로 JDK 14 에서 정식 버 전의 기능 이 되 었 습 니 다.JEP 361:Switch Expressions(Standard).
사실 Switch 에 추 가 된 기능 은 두 가지 가 있 습 니 다.하 나 는 case 를 연결 할 수 있 고 하 나 는 switch 가 값 을 되 돌려 줄 수 있 습 니 다.
앞 에 쓰다
switch 라 는 이름 의 패 키 지 를 만 들 려 고 흥 이 났 을 때 갑자기 IDEA 에서 자바 류 를 만 들 지 않 았 다 는 것 을 알 게 되 었 습 니 다.
나의 거듭 된 시 도 를 통 해 이름 을 바 꾸 었 는데 마침내 나 에 게 숨겨 진 작은 비밀 이 발견 되 었 다.
자바 키 워드 는 패키지 이름 에 사용 할 수 없습니다.그래,그동안 패키지 의 이름 이 그렇게 많 았 는데,지금 은 바람 을 쐬 는 규칙 을 만 들 려 고 하 는데,이런 규칙 이 있다 는 것 을 알 게 되 었 다.
그럼 자바 키 워드 는 어떤 게 있 나 요?다음은 됐어.

연서 케이스
먼저 오래된 버 전의 예 를 보 세 요.

 @Test
 public void useOldSwitch(){
  switch (MONDAY) {
   case MONDAY:
   case FRIDAY:
   case SUNDAY:
    System.out.println(6);
    break;
   case TUESDAY:
    System.out.println(7);
    break;
   case THURSDAY:
   case SATURDAY:
    System.out.println(8);
    break;
   case WEDNESDAY:
    System.out.println(9);
    break;
  }
 }
위의 예 에서 우 리 는 모든 주 에 맞 게 결 과 를 출력 하고 싶 습 니 다.케이스 문 구 를 많이 써 서 보기 좋 지 않 습 니 다.
새 버 전의 예 를 다시 봅 시다.

 @Test
 public void useNewSwitch(){
  switch (MONDAY) {
   case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);
   case TUESDAY    -> System.out.println(7);
   case THURSDAY, SATURDAY  -> System.out.println(8);
   case WEDNESDAY    -> System.out.println(9);
  }
 }
아름 다운 연작 으로 모든 것 을 가 져 간다.
여기 switch 문 구 는 반환 값 이 없 기 때문에 default 문 구 는 필요 하지 않 습 니 다.
switch 반환 값
switch 에서 값 을 부여 하 는 상황 을 고려 합 니 다:

 @Test
 public void oldSwitchWithReturnValue(){
  int numLetters;
  switch (MONDAY) {
   case MONDAY:
   case FRIDAY:
   case SUNDAY:
    numLetters = 6;
    break;
   case TUESDAY:
    numLetters = 7;
    break;
   case THURSDAY:
   case SATURDAY:
    numLetters = 8;
    break;
   case WEDNESDAY:
    numLetters = 9;
    break;
   default:
    throw new IllegalStateException("      !");
  }
 }
전통 적 인 방식 으로 우 리 는 국부 변 수 를 정의 하고 case 에서 이 국부 변수 에 값 을 부여 해 야 한다.
새 버 전의 switch 를 어떻게 사용 하 는 지 봅 시다.

 @Test
 public void newSwitchWithReturnValue(){
  int numLetters = switch (MONDAY) {
   case MONDAY, FRIDAY, SUNDAY -> 6;
   case TUESDAY    -> 7;
   case THURSDAY, SATURDAY  -> 8;
   case WEDNESDAY    -> 9;
   default -> throw new IllegalStateException("      !");
  };
 }
아주 간단 하 죠?
여기에 default 작업 이 필요 합 니 다.그렇지 않 으 면 컴 파일 오류 가 발생 할 수 있 습 니 다.옮 겨 다 니 지 않 은 값 이 있 을 수 있 기 때문이다.
yield
위의 switch 가 값 을 되 돌려 주 는 경우 케이스 뒤의 표현 식 이 복잡 하 다 면 괄호 로 둘 러 야 합 니 다.이러한 상황 에서 우 리 는 yield 를 사용 하여 되 돌 릴 값 을 되 돌려 야 한다.

 @Test
 public void withYield(){
  int result = switch (MONDAY) {
   case MONDAY: {
    yield 1;
   }
   case TUESDAY: {
    yield 2;
   }
   default: {
    System.out.println("  MONDAY,   TUESDAY!");
    yield 0;
   }
  };
 }
1.case L->탭 은 관통 기능 을 없 앴 습 니 다.case 뒤의 상수 는 쉼표 로 여러 상수 로 나 눌 수 있 습 니 다.
코드 보기

public class SwitchTest {
  public static void main(String[] args) {
    Weekday day = Weekday.MON; //         
    //case L:        
    switch (day){//   break;
      case MON, TUE, WEN -> {
        System.out.println("   ");
        String s = "abc"; //             
      }
      case THU, FRI   -> {
        System.out.println("   ");
        String s = "def";
      }
      case SAT, SUN   -> {
        System.out.println("  ");
      }
    }
    System.out.println("12");
}

//    
enum Weekday{
  MON,TUE,WEN,THU,FRI,SAT,SUN
}
실행 결과:
전반 주
12
2.JDK 14 에서 switch 를 확장 하여 표현 식 으로 할당 하거나 인쇄 할 수 있 습 니 다.

public class SwitchTest {
  public static void main(String[] args) {
    Weekday day = Weekday.MON; //         

    //JDK14    switch       
    //          
    System.out.println(switch(day){
      case MON, TUE, WEN -> "   ";
      case THU, FRI   -> "   ";
      case SAT, SUN   -> "  ";
    });

    //             
    String text = switch(day){
      case MON, TUE, WEN -> "   ";
      case THU, FRI   -> "   ";
      case SAT, SUN   -> "  ";
    };

    //  yield       
    day = Weekday.SAT;
    int x = switch(day){
      case MON, TUE, WEN -> 1;
      case THU, FRI   -> 2;
      case SAT, SUN   -> {
        int rnd = (int)(Math.random()*10); //    (0,10)      
        System.out.println("rnd = " + rnd);
        yield rnd; //  yield       
      };
    };

    System.out.println("x = " + x);
  }
}

//    
enum Weekday{
  MON,TUE,WEN,THU,FRI,SAT,SUN
}
총결산
본 고 는 JDK 14 의 switch 새로운 특성 을 소개 한다.유일한 정식 버 전의 새로운 특성 이기 도 하고...
본문의 예 https://github.com/ddean2009/learn-java-base-9-to-20
JDK 14 의 새로운 기능 을 가 진 switch 표현 식 의 실현 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 JDK 14 switch 표현 식 내용 은 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기