Является ли документация JDK частью спецификации языка?

Существует только одна официальная Спецификация языка Java, и все реализации Java должны соответствовать ей.

Как насчет документации API: все ли реализации Java должны соответствовать этой версии или реализация может по-разному определять поведение некоторых методов и классов, если она совместима с JLS?

Давайте приведем конкретный пример: может ли реализация Java включать HashMap это не принимает null элементы?

1 ответ

Решение

Я верю, что да, это так.

При ближайшем рассмотрении, я думаю, что это не так.

Как указано в JLS 8 в п.1.4:

1.4. Отношение к предопределенным классам и интерфейсам

Как отмечено выше, эта спецификация часто ссылается на классы API платформы Java SE. В частности, некоторые классы имеют особые отношения с языком программирования Java. Примеры включают классы, такие как Object, Class, ClassLoader, String, Thread, а также классы и интерфейсы в пакете java.lang.reflect, среди прочих. Эта спецификация ограничивает поведение таких классов и интерфейсов, но не предоставляет полную спецификацию для них. Читатель обращается к документации API платформы Java SE.

С одной стороны, они заявляют, что документ JLS не предоставляет полной спецификации, и отправляют читателя в документацию API платформы Java SE.

С другой стороны, в JLS есть различные места, когда упоминаются некоторые API (форма множественного числа) Java SE. Кроме того, кажется, что JLS не содержит ссылок на конкретную спецификацию Java SE API:

3.1. Unicode

Некоторые API-интерфейсы платформы Java SE, в основном в классе Character, используют 32-разрядные целые числа для представления кодовых точек в качестве отдельных объектов. Платформа Java SE предоставляет методы для преобразования между 16-битными и 32-битными представлениями.

3.10.4. Символьные литералы

Символьные литералы могут представлять только кодовые единицы UTF-16 (§3.1), т. Е. Они ограничены значениями от \u0000 до \uffff. Дополнительные символы должны быть представлены в виде суррогатной пары в последовательности символов или в виде целого числа, в зависимости от API, с которым они используются.

9.6.4. Предопределенные типы аннотаций

Несколько типов аннотаций предопределены в библиотеках платформы Java SE. Некоторые из этих предопределенных типов аннотаций имеют особую семантику. Эта семантика указана в этом разделе. Этот раздел не предоставляет полную спецификацию для предопределенных аннотаций, содержащихся здесь; это роль соответствующих спецификаций API. Здесь указана только та семантика, которая требует особого поведения со стороны компилятора Java или реализации виртуальной машины Java.

Другие вопросы по тегам