Рубрики
Без рубрики

Ява 15 сентября, торноу, Джорджия!

15/09/20 – Ява 15 сентября, Торна, Джорджия. Особенности предварительного просмотра Além das, conhecidas das versões anteriores (текс… Помечен как java, запись, java 15, запечатан.

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 List getTop5ExpensiveTV(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”