15/09/20 – Ява 15 сентября, Торна, Джорджия.
Além das функции предварительного просмотра , conhecidas das versões anteriores ( Текстовые блоки , Сопоставление с образцом для instanceof и Records ), был введен нет Java 15 os conceitos de закрытые классы e Локальные интерфейсы и перечисления .
1. приступая к работе
Para começar установщик vamos a JDK 15. Я использую sdkman для управления всеми Jdk мой workspace , но если вам удобнее скачать прямо из OpenJDK, ссылка .
С помощью sdkman , сначала мы перечислили Jdk доступных:
sdk list java
Затем просто запустите команду с identifier обратный:
sdk install java 15.ea.36-open
Готово! JDK установлен и готов к использованию. Теперь достаточно настроить IntelliJ:
2. Закрытые классы и интерфейсы (Предварительный просмотр)
Essa funcionalidade разрешите asumir o управление иерархией классов e интерфейсы através да ключевое слово запечатано
e разрешения
. Давайте на примере:
sealed public interface Shape permits Circle, Square, Rectangle, Diamond { }
В коде выше, мы определяем интерфейс Форма
и мы договорились, как шлифованный
. Классы шлифованный требуют заявление от keyword разрешение
, чтобы сказать компилятору, какие классы или интерфейсы, может расширить или реализовать Форма
. Существует разумное исключение из правил, связанных с тем, что касается реализации, и нет никаких напоминаний о том, что такое запечатанный класс . Quando isto ocorre, подемос опускает/| ключевое слово разрешения да декларация да
запечатанный класс .
Классы основной класс poi é запечатанный требование декларирования: окончательная
, не запечатанный
подразделение запечатано
.
Как правило, классов дочери будут окончания для предотвращения, которые могут быть унаследованы. При попытке наследовать, заметите ошибку компиляции.
final class Square implements Shape { } class TimesSquare extends Square { } // Compilador fica chateado, pois Square é final.
Также можно заменить использование конец класса record
, потому что это классы, стойкими и, под капотом, компилятор генерирует конец класса .
record Square() implements Shape { }
Структур дочери, объявленные в качестве non-sealed
расширяют иерархии, что позволяет им быть расширены или реализованы любым другим класс, или интерфейс.
non-sealed interface Diamond extends Shape { } non-sealed class Circle implements Shape { } class BigCircle extends Circle { } interface ColoredDiamond extends Diamond {}
Разработка-se tentar que классы без герметизации могут нарушить сплоченность своих моделей, так как они разоблачать все то, что пытался защитить с шлифованный
.
Por ultimo, e nao menos importante, podemos ser запечатанные классы реализация запечатанные классы . Таким образом, мы не настолько открыты, как non-sealed
и не настолько гипса, как окончания
продолжаем ограничение наследования или композиции.
sealed class Rectangle implements Shape permits CustomRectangle { } final class CustomRectangle extends Rectangle { }
2.1. Соответствие шаблону типовых испытаний
С контролем иерархии, что sealed classes предоставляют компилятору, можно было бы сделать type-test-pattern равно, что мы видим в when жалость 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); }; }
Attualmente esse кодиго акума нет компиляции , poi тип-тест-шаблон в switch-case не является функцией по-прежнему, это всего лишь возможность. A razao isso, как можно сделать прецедент, как это сделать, чтобы избежать ошибок в Java 14: Сопоставление шаблонов для экземпляра .
Идем дальше, за то, что компилятор точно знать, кто реализует определяется sealed class , можно было бы опустить default в switch-case , потому что все возможности были объявлены.
3. Локальные интерфейсы электронные перечисления
Com a сегунда предварительный просмотр de Записи ( JEP 384 ) assomado в Java-15, возможность создания структуры в локальной области видимости метода, превратилась в реальность. Кроме того, records теперь мы можем объявить классы, перечисления и интерфейсы в области методов!
public ListgetTop5ExpensiveTV(final List 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()); }
Приведенный выше пример показывает воспользоваться локальных структур. Был использован запись
перечисления
чтобы сделать фильтр в списке.
5. Что дальше?
Существуют и другие features повышение производительности и reimplementações сооружений, не стесняйтесь чтение release notes .
4. Характеристика
Оригинал: “https://dev.to/gsuaki/java-15-se-tornou-ga-4l01”