JEP 213: Milling Project Coin
Доработка проекта Coin
| Автор | Joseph D. Darcy |
| Ответственный | Joe Darcy |
| Тип | Feature |
| Область | SE |
| Статус | Closed / Delivered |
| Выпуск | 9 |
| Компонент | tools / javac |
| Обсуждение | compiler dash dev at openjdk dot java dot net |
| Трудоёмкость | S |
| Длительность | M |
| Рецензенты | Brian Goetz |
| Одобрен | Brian Goetz |
| Создан | 2014/05/09 23:05 |
| Обновлён | 2023/06/14 18:04 |
| Задача | 8042880 |
Аннотация
Небольшие изменения языка, вошедшие в Project Coin / JSR 334 в составе JDK 7 / Java SE 7, оказались простыми в использовании и хорошо показали себя на практике. Однако несколько поправок могли бы сгладить шероховатости этих изменений. Кроме того, использование подчёркивания ("_") в качестве идентификатора, которое начиная с Java SE 8 вызывает предупреждение, в Java SE 9 должно стать ошибкой. Также предлагается разрешить интерфейсам иметь приватные методы.
Что не является целью
Этот JEP не предлагает начинать работу над «Coin 2.0» или в целом собирать новые предложения по изменению языка.
Описание
Предлагаются пять небольших поправок к языку программирования Java:
-
Разрешить @SafeVargs для приватных методов экземпляра. Аннотацию
@SafeVarargsможно применять только к методам, которые нельзя переопределить, в том числе к статическим методам и final-методам экземпляра. Приватные методы экземпляра — ещё один случай, который @SafeVargs мог бы охватить. -
Разрешить использовать переменные, которые являются effectively final, в качестве ресурсов в операторе try-with-resources. Окончательная версия оператора try-with-resources в Java SE 7 требует объявлять новую переменную для каждого ресурса, которым управляет оператор. Это стало изменением по сравнению с более ранними итерациями этой возможности. В черновике JSR 334 для публичного рецензирования обсуждается обоснование отказа от версии try-with-resource из раннего черновика для рецензирования, которая допускала выражение, управляемое оператором. Экспертная группа JSR 334 поддерживала дополнительное уточнение try-with-resources: если на ресурс ссылается переменная, объявленная как final или являющаяся effectively final, оператор try-with-resources может управлять ресурсом без объявления новой переменной. Такое ограниченное выражение, управляемое оператором try-with-resources, не порождает семантических проблем, из-за которых была убрана поддержка произвольных выражений. К моменту, когда экспертная группа остановилась на этом уточнении, в графике выпуска не оставалось достаточно времени, чтобы внести это изменение.
-
Разрешить diamond с анонимными классами, если выводимый тип аргумента можно записать явно (denotable). Поскольку тип, выводимый при использовании diamond с конструктором анонимного класса, мог выходить за пределы множества типов, поддерживаемых атрибутом signature, использование diamond с анонимными классами в Java SE 7 было запрещено. Как отмечено в предложенном окончательном черновике JSR 334, это ограничение можно было бы ослабить, если выводимый тип можно записать явно.
-
Завершить начатое в Java SE 8 исключение подчёркивания из множества допустимых имён идентификаторов.
-
Поддержка приватных методов в интерфейсах ненадолго рассматривалась для включения в Java SE 8 в рамках работы по добавлению поддержки лямбда-выражений, но была отозвана, чтобы лучше сосредоточиться на более приоритетных задачах Java SE 8. Теперь предлагается реализовать поддержку приватных методов интерфейсов, что позволит неабстрактным методам интерфейса использовать общий код.
На фоне изменений языка Java эти уточнения очень малы. Изменение, связанное с @SafeVarags, может потребовать правки лишь одного-двух предложений спецификации и изменения сопоставимого объёма в javac. Однако, как и при любом изменении языка Java, необходимо тщательно обработать все части платформы, которые нужно обновить.
Тестирование
Изменения языка потребуют обычных модульных и регрессионных тестов для javac. Набор тестов компилятора JCK потребуется обновить, как позитивные, так и негативные тесты.