Java 15 se tornou GA!
2020년 9월 15일 - Java 15 Se torna GA.
이전 미리보기 기능(텍스트 블록, 레코드의 인스턴스에 대한 패턴 일치), Java 15 os conceitos de sealing 클래스 및 로컬 인터페이스 및 열거형 소개 기능이 있습니다.
1. 시작하기
JDK 15를 설치할 때 vamos가 설치됩니다. sdkman JDK 작업 공간으로 사용할 수 있으며 OpenJDK에서 바로 사용할 수 있습니다. este é o link .
sdkman, JDKs disponíveis로 최고의 목록 활용:
sdk list java
Em seguida, basta executar o comando com o 식별자 encontrado:
sdk install java 15.ea.36-open
조속히! JDK를 설치하고 사용하면 문제가 해결됩니다. IntelliJ에서 기본 구성:
2. 봉인된 클래스 및 인터페이스(프리뷰)
Essa 기능은 키워드
sealed
및 클래스permits
의 인터페이스에서 계층 구조를 제어할 수 있도록 허용합니다. 예시:sealed public interface Shape permits Circle, Square, Rectangle, Diamond { }
코드가 없습니다. 인터페이스
Shape
와 마커sealed
가 명확합니다. 봉인된 클래스는 키워드 선언permits
을 요구하고 컴파일러는 클래스 ou 인터페이스 poderão estender ou implementarShape
로 요구합니다. 봉인된 클래스를 요구하는 메시지가 없는 구현으로 예외가 존재합니다. Quando isto ocorre, podemos 생략 a 키워드permits
da declaração da sealing class.Classes cuja classe pai é sealing demandam declarar sua abrangência de hierarquia entre:
final
, non-sealed
ou sealed
.Normalmente, class filhas serão final para evitar que possam ser herdadas. Ao tentar herdar, observará um erro de compilação.
final class Square implements Shape { }
class TimesSquare extends Square { } // Compilador fica chateado, pois Square é final.
record
로 최종 클래스를 사용할 수 있는 대체 항목을 사용할 수 있습니다.record Square() implements Shape { }
estuturas filhas declaradas como
non-sealed
가 계층 구조를 확장함에 따라 qualquer 또는 classe ou 인터페이스를 구현하는 것이 가능합니다.non-sealed interface Diamond extends Shape { }
non-sealed class Circle implements Shape { }
class BigCircle extends Circle { }
interface ColoredDiamond extends Diamond {}
Deve-se atentar que non-sealed classes podem quebrar a coesão de seus modelos, pois voltam a expor tudo o que tentou proteger com
sealed
.
마지막으로 가장 중요한 것은 봉인된 클래스를 구현하고 봉인된 클래스를 구현하는 것입니다. Dessa forma, não deixamos tão aberto quanto as
non-sealed
e nem tão engessado quanto as final
, continuamos restringindo a herança ou composição.sealed class Rectangle implements Shape permits CustomRectangle { }
final class CustomRectangle extends Rectangle { }
2.1. 유형 테스트 패턴 매칭
Com o controle de hierarquia que as sealed class proveem ao compilador, seria possível fazer type-test-pattern igual ao que vemos no when do Kotlin .
public Double getAreaOfShape(final Shape shape) {
return switch (shape) {
case Circle c -> circleArea(c);
case Diamond d -> diamondArea(d);
case Rectangle r -> rectangleArea(r);
case Square s -> squareArea(s);
};
}
Atualmente esse código acima não compila, pois type-test-pattern no switch-case não é uma funcionalidade ainda, é apenas uma possibilidade. A razão disso, é por conta do foi adicionado ao Java 14: Pattern Matching for instanceof.
대부분의 경우 컴파일러가 봉인된 클래스를 구현하기 위해 세이버 검사를 수행하는지 확인하고, 기본적으로 스위치 케이스를 생략하거나 생략할 수 있습니다.
3. 로컬 인터페이스 e 열거형
Com a segunda preview de Records (JEP 384 ) assomado no Java 15, a possibilidade de criar estruturas no escopo local de um método virou realidade. Além das records, agora podemos declarar classes, enums e interface dentro do escopo de métodos também!
public List<TV> getTop5ExpensiveTV(final List<TV> tvs) {
enum Price {EXPENSIVE, CHEAP}
record TVPrice(TV tv, Double amount) {
Price price() {
return amount > 4_000 ? Price.EXPENSIVE : Price.CHEAP;
}
}
return tvs.stream()
.map(tv -> new TVPrice(tv, calculateAmount(tv)))
.sorted(Comparator.comparing(TVPrice::price))
.map(TVPrice::tv)
.limit(5)
.collect(Collectors.toList());
}
O exemplo acima mostra uma forma de usufruir de estruturas locais. Foi utilizado local
record
e enum
para fazer um filtro em uma lista.5. 다음은 무엇입니까?
Existem outras features de melhoria de performance e reimplementações de estruturas, não hesite em ler orelease notes completo .
4. 참조
Reference
이 문제에 관하여(Java 15 se tornou GA!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/gsuaki/java-15-se-tornou-ga-4l01텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)