자바 (14)의 새로운 기능!

자바 (14) 3 월 (17) 출시 예정이다. 그래서, 버전은 코드를 작성하는 자바 개발자를위한 14 개의 새로운 기능 하루 종일, 코드의 유지 보수가 가장 유용있는 기능 무엇인가?

저자 |  라울 - 가브리엘 Urma

번역기 | 반월 상 연골, Zebian | 궈 루이

출품 | CSDN (ID : CSDNnews)

다음은 번역입니다 :

JEP 14 판 포함 (자바 향상 제안, 자바 개선 제안)보다 버전 12 버전보다 13까지 추가합니다. 이 기사에서는 다음과 같은 점에 초점을 맞출 것이다 :

  • 제 자바 12 및도 13에 나타난 향상된 스위치 식, 그것이 자바 14 전체지지를 받고

  • instanceof를 지원 모델 일치 (언어 기능)

  • NullPointerException이 (JVM 특성)

나는 적극적으로 이러한 기능은 자바 팀에 대한 피드백을 제공하고, 자바의 발전에 기여 코드를 실험,이 기사를 읽은 후 당신을 바랍니다.

스위치 식

스위치 표현의 자바 (14)은 영원히 지속됩니다. 당신이 스위치 표현이 무엇인지 기억해야하는 경우 (앞의 두 기사 https://blogs.oracle.com/javamagazine/new-switch-expressions-in-java-12,https://blogs를 참조 할 수 있습니다. oracle.com/javamagazine/inside-java-13s-switch-expressions-and-reimplemented-socket-api).

이전 릴리스에서는 스위치 표현은 '미리보기'단계의 단지 특성이다. 나는 '미리보기'단계의 특성의 목적은 피드백을 수집하기 위해, 이러한 기능은 피드백의 결과에 따라 언제든지 변경 될 수 있습니다입니다됨을 알려드립니다 이러한 기능도 제거 할 수 있지만, 일반적으로 모든 미리보기 기능은 마지막으로 자바에서 수정 될 예정입니다 .

새로운 스위치 발현 장점 때문에 버그의 가능성도 낮다가,보다 포괄적 생략 할 기본 동작 (가을-를 통해), 및 표현식 및 쓰기에 쉬운 형태의 조합이 없다는 것입니다. 예를 들어, 현재의 화살표 표현 구문을 사용할 수있는 스위치로서 다음과 같다 :

var log = switch (event) {
    case PLAY -> "User has triggered the play button";
    case STOP, PAUSE -> "User needs a break";
    default -> {
        String message = event.toString();
        LocalDateTime now = LocalDateTime.now();
        yield "Unknown event " + message + 
              " logged on " + now;
    }
};

텍스트 블록

미리보기 기능은 자바 (13) 텍스트 블록을 소개한다. 텍스트 블록과, 다중 광고 문자 스트링을 쉽게 제조. 두 번째 미리보기 자바 (14)의 기능을하지만, 몇 가지 변화가 있었다. 예를 들어, 멀티 라인 텍스트 형식은 문자열 연결 및 이스케이프 시퀀스 번호를 기재해야합니다. 다음 코드는 HTML의 예를 보여줍니다 :

String html = "<HTML>" +
"\n\t" + "<BODY>" +
"\n\t\t" + "<H1>\"Java 14 is here!\"</H1>" +
"\n\t" + "</BODY>" +
"\n" + "</HTML>";

만 세 따옴표를 시작 및 종료 텍스트 블록이 더 우아한 코드를 작성할 수 있습니다 태그로 텍스트 블록으로,이 과정을 단순화 할 수 있습니다 :

String html = """
<HTML>
  <BODY>
    <H1>"Java 14 is here!"</H1>
  </BODY>
</HTML>""";

기존의 문자열 리터럴, 텍스트 블록의 더 나은 표현과 비교. 자세한 내용은이 문서 (https://blogs.oracle.com/javamagazine/text-blocks-come-to-java)를 참조 할 수 있습니다.

자바 (14)는 두 개의 새로운 이스케이프 시퀀스를 소개합니다. 첫째, 당신은 공간을 표현하기 위해 새로운 \의 이스케이프 시퀀스를 사용할 수 있습니다. 둘째, 당신은 줄 바꿈 문자를 삽입 피하기 위해 라인의 백 슬래시 \ 끝을 사용할 수 있습니다. 이것은 쉽게 아주 긴 줄의 텍스트 블록에있을 수는 가독성을 위해 여러 행으로 분해된다.

예를 들어, 다음과 같이 여러 줄의 문자열은 이제 기록됩니다

String literal = 
         "Lorem ipsum dolor sit amet, consectetur adipiscing " +
         "elit, sed do eiusmod tempor incididunt ut labore " +
         "et dolore magna aliqua.";

텍스트 블록에 사용 \ 이스케이프 시퀀스는,이 기록 될 수 있습니다 :

String text = """
                Lorem ipsum dolor sit amet, consectetur adipiscing \
                elit, sed do eiusmod tempor incididunt ut labore \
                et dolore magna aliqua.\
                """;


instanceof는 패턴 매칭

쓰기 코드에 그것과 자바 (14 명)을 소개합니다 미리보기 기능, 더 이상 필요 먼저 다음 instanceof를 판단 통해 캐스팅. 예를 들어, 코드를 다음 :

if (obj instanceof Group) {
  Group group = (Group) obj;


  // use group specific methods
  var entries = group.getEntries();
}

다음과 같이 미리보기 기능을 재구성 할 수 있습니다 :

if (obj instanceof Group group) {
  var entries = group.getEntries();
}

코드 그룹과 같은 조건 코드 블록의 첫 번째 단락에 명시된 이유 OBJ 그룹 유형 검사 요구 사항 OBJ의 조건 때문에 그것을 입력? 이 오류가 발생할 수 있습니다.

이보다 간결 구문 자바 프로그램은 출연자의 대부분을 제거 할 수있다. (2011 연구 논문 (http://www.cs.williams.edu/FTfJP2011/6-Winther.pdf) 관련 언어 기능이 지적에 대해 그 instanceof를 한 후 조건문에서 모든 형식 변환의 24 %. )

JEP (305)는 이러한 변화를 설명하고 다음과 같은 두 가지 상응하는 문구를 설명하기 Joshuoa 블로흐의 책 "효과적인 자바"의 예를 제공합니다 :

@Override public boolean equals(Object o) { 
    return (o instanceof CaseInsensitiveString) && 
            ((CaseInsensitiveString) o).s.equalsIgnoreCase(s); 
}

중복 코드는 캐스트를 제거 할 수 CaseInsensitiveString 다음과 같은 방식으로 변환을 수행합니다

@Override public boolean equals(Object o) { 
    return (o instanceof CaseInsensitiveString cis) &&
            cis.s.equalsIgnoreCase(s); 
}

그것은 일반적인 패턴 매칭의 문을 열기 때문 미리보기 기능은 시도 가치가있다. 패턴 매칭 아이디어가 편리 언어 구문을 제공하고, 특정 조건에 따라 상기 물체의 부분을 추출한다. 조건 유형은 특정 필드에 적절한 방법이나 접근을 호출하는 추출 조작의 필요성을 확인하는 것이 때문, instanceof 연산자를 사용하는 경우이다.

이 기능을 사용함으로써, 버그의 발생 가능성을 감소시키는 코드 중복을 줄이기 위해 더 확실히 후 즉, 프리뷰 기능은 단지 시작이다.

기록

또 다른 특징은 미리보기 기록이다. 다른 미리보기 기능은 앞에서 설명한 것처럼, 미리보기 기능은 자바 코드 중복을 감소 추세로, 개발자가보다 정확한 코드를 작성하는 데 도움을 준수합니다. 레코드 타입은 주로 특정 분야에 사용되며, 그 기능은 임의의 사용자 동작없이 변위 데이터를 저장하는 것이다.

우리는 시점에 와서 도메인 클래스의 간단한 예제 제공 : BankTransaction, 세 개의 필드로 구성, 트랜잭션을 나타냅니다 날짜, 금액, 그리고 설명. 클래스 정의, 우리는 측면의 수를 고려해야합니다

  • 생성자

  • getter 메소드

  • toString ()

  • 해시 코드 () 和 같다 ()

코드의 부분은 일반적으로 IDE에 의해 자동으로 생성되지만 공간을 많이 차지하게됩니다. 다음은 전체 발생 BankTransaction 범주입니다 :

public class BankTransaction {
    private final LocalDate date;
    private final double amount;
    private final String description;




    public BankTransaction(final LocalDate date, 
                           final double amount, 
                           final String description) {
        this.date = date;
        this.amount = amount;
        this.description = description;
    }


    public LocalDate date() {
        return date;
    }


    public double amount() {
        return amount;
    }


    public String description() {
        return description;
    }


    @Override
    public String toString() {
        return "BankTransaction{" +
                "date=" + date +
                ", amount=" + amount +
                ", description='" + description + '\'' +
                '}';
    }


    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        BankTransaction that = (BankTransaction) o;
        return Double.compare(that.amount, amount) == 0 &&
                date.equals(that.date) &&
                description.equals(that.description);
    }


    @Override
    public int hashCode() {
        return Objects.hash(date, amount, description);
    }
}

자바 (14)이 중복이 더 명확하게 목적을 표현할 수있다 해결할 수있는 방법을 제공합니다 :이 클래스의 유일한 목적은 데이터를 통합하는 것입니다. 기록은 등호, 해시 코드와의 toString 메소드의 구현을 제공 할 것입니다. 다음과 같이 따라서, BankTransaction 클래스를 재구성 할 수 있습니다 :

public record BankTransaction(LocalDate date,
                              double amount,
                              String description) {}

기록함으로써, 당신은 "자동으로"등호, 해시 코드 toString 및 구현뿐만 아니라, 구성 및 게터 방법을 얻을 수 있습니다.

이 예제를 시도하려면 미리 플래그를 사용하여 파일을 컴파일 할 필요가 :

javac --enable-preview --release 14 BankTransaction.java

기록 필드는 암시 적으로 마지막이다. 따라서, 기록 필드는 재 할당 할 수 없습니다. 그러나 참고이 전체 기록이 변수가 될 수있는 필드에 객체를 저장, 불변의 것을 의미하지 않습니다.

당신이 기록에 대한 자세한 내용을 읽기에 관심이 있다면, 당신은 (https://blogs.oracle.com/javamagazine/records-come-to-java) 벤 에반스는 최근 "자바 매거진"에 게시 된 문서를 읽을 수 있습니다.

이 기능에 대한 계속 지켜봐 주시기 바랍니다. 보기의 자바 개발자 포인트의 새로운 세대를 교육의 관점에서, 기록도 매우 흥미 롭다. 당신이 주니어 개발자를 양성하려는 경우 내가 말을해야 할 때 예를 들어, 기록? OOP 전이나 후에 말하는?

NullPointerException이

어떤 사람들은 즉, 보는 새로운 "안녕하세요"프로그램으로 인해 NullPointerException이 조만간 만남을 NullPointerException이 던져한다고 생각합니다. 원래 코드를 표시하지 않기 때문에 종종 프로덕션 환경 로그에 나타납니다 때문에 모든 곁에 농담이 예외는, 문제를 유발하는, 매우 어려운 디버깅이 발생할 수 있습니다. 예를 들어, 코드를 다음 :

var name = user.getLocation().getCity().getName();

자바 (14) 전에 다음과 같은 오류가 발생할 수 있습니다 :

Exception in thread "main" java.lang.NullPointerException
    at NullPointerExample.main(NullPointerExample.java:5)

라인 5가 할당 문 (예 :의 getLocation ()와 getCity ()와 같은) 여러 메서드 호출이 포함되어있는 경우 불행하게도, 다음 중 하나가 null을 반환 할 수 있습니다. 사실, 변수 사용자는 널 (null) 일 수 있습니다. 따라서 NullPointerException이 발생 누구 확인할 수 없습니다.

자바 (14), 새로운 JVM 기능은 자세한 진단 정보를 표시 할 수 있습니다 :

Exception in thread "main" java.lang.NullPointerException: Cannot invoke "Location.getCity()" because the return value of "User.getLocation()" is null
    at NullPointerExample.main(NullPointerExample.java:5)

이 메시지는 두 가지 구성 요소가 포함되어 있습니다 :

  • 결과 : Location.getCity는 () 호출 할 수 없습니다

  • 이유 : User.getLocation ()는 널 (null) 값을 반환

효과적인 자바를 실행하는 경우에만 다음 플래그를 사용하여 진단 정보의 버전을 강화 :

-XX:+ShowCodeDetailsInExceptionMessages

다음은 그 예이다 :

java -XX:+ShowCodeDetailsInExceptionMessages NullPointerExample

향후 릴리스에서이 옵션은 기본이 될 수 있습니다.

이러한 개선은 메소드 호출에 대해서만 유효하지 않습니다, 다른 곳은 NullPointerException이 필드 액세스, 배열 액세스 및 다른 과제를 포함하여도 효과가 발생할 수 있습니다.

개요

자바 (14)은 좋은 도움 개발자는 자신의 일상 작업을 완료 할 수 있습니다 언어 기능과 업데이트의 몇 가지 새로운 프리뷰 버전을 제공합니다. 자바 (14)이 생성되어 정확한 데이터 클래스를위한 새로운 방법, 기록을 소개합니다. 또한, NullPointerException이 메시지는 명확한 진단 정보를 표시 할 수 있도록 개선되었습니다. 스위치 표현은 자바 (14)의 일부가되었습니다. 텍스트 블록 기능을 사용하면 두 개의 새로운 이스케이프 시퀀스의 도입 후 또 다른 미리보기 여러 줄 문자열을 처리 할 수 ​​있습니다. 이벤트 JDK 비행 레코더의 흐름의 변화가있다.

가시, 자바 (14)는 많은 혁신을 가져왔다. 그런 다음 다시 자바 개발 팀에, 이러한 기능을 시도해야합니다.

원본 : HTTPS : //blogs.oracle.com/javamagazine/java-14-arrives-with-a-host-of-new-features

이 문서 CSDN 번역은 원본의 출처를 표시하시기 바랍니다.

【종료】

"강제 계획 [2 분기는] - 학습 능력 도전"시작!
지금 가입일 March 21 일까지, 원래의 저자, 도전에 당신을 기다리고 독점 [추가] 메달을 지원하기 위해 흘러야한다

추천 도서 

면접을 두려워는 질문을 받았다! 포스 프로그램 | 이진 트리 알고리즘 재고

전자 비즈니스 플랫폼에 보리 알리, 제이 콘서트 티켓은 좋은 Qiangdian되지 않습니다?

궁극적 인 가이드를 청소 파이썬 데이터 (2020 판)

박사는 컴퓨터뿐만 아니라 초과 근무 메이크업, 여신 조각 손의 이른 시간에에게 ...... 운전하기!

손실 시리즈에 보이지 않는! 여기에 전체 하둡 클러스터 설치 안내서, 가장 이해할 수 하둡의 개념입니다! |와 코드

새로운 코로나 바이러스, 비트 코인, 애플에 대한 이야기 ...... • 워렌 버핏 응답자 18 절에서, 가치가 방문!

당신은 내가 즐겨 찾기로 심각하게, 모든 점에서 보면

출시 1805 원저 · 원 찬양 40000 + · 조회수 16,310,000을 +

추천

출처blog.csdn.net/csdnnews/article/details/104765635