JAVA 15
- 2020/09
- preview 제외
기능
Records type
- 쉽게 immutable data object를 만들수있는 새로운 java 클래스 타입이다.
- 기본 포함
- getter
- toString (meaningful)
- all-argument constructor
- equals
- hashCode
public record Person(String name, int age){ // 생성자 validation 가능 public Person { if (age < 0) { throw new Exception("illegal");} } }
sealed class JEP 409
- 인터페이스에서 어떤 클래스가 상속할수있는지 명시할 수 있는 방식. ```java public abstract sealed class Person permits Employee, Manager { }
public final class Employee extends Person {} public non-sealed class Manager extends Person {}
- sealed 클래스를 상속하는 클래스는 추가 상속을 제한하기 위해 `final`, `non-sealed`, `sealed` 중 명시해야한다.
- if/else 문에서 instanceof를 체크하는 경우 일부 타입체크가 누락될 수 있는데, sealed 를 사용하면 컴파일러가 타입체크 누락을 warning으로 알려준다. > if/else에서는 동작하지 않는듯? jdk 17 에서 테스트함.
- 추후 pattern switch 사용시 default case 없이, 누락 없이 sealed 로 명시된 서브클래스 타입체크가 가능하다.
- pattern switch를 사용할 수 있을때 sealed 클래스의 역할이 유용해질듯.
```java
Shape rotate(Shape shape, double angle) {
return switch (shape) { // pattern matching switch
case Circle c -> c;
case Rectangle r -> shape.rotate(angle);
case Square s -> shape.rotate(angle);
// no default needed!
}
}
hidden classes
- 런타임에만 뜰 수 있고, 코드내에서 다른 클래스에서 링크할 수 없다. reflection도 마찬가지.
- 효과적인 로딩/언로딩을 위해 고안된 모델이다.
ZGC experimental 탈출
text block
- 줄내림 등 가독성에 좋은 textblock이 정식 사용가능하다.
return """ <html> <body> <span>example text</span> </body> </html>""";