Является ли документация 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:
Некоторые API-интерфейсы платформы Java SE, в основном в классе Character, используют 32-разрядные целые числа для представления кодовых точек в качестве отдельных объектов. Платформа Java SE предоставляет методы для преобразования между 16-битными и 32-битными представлениями.
Символьные литералы могут представлять только кодовые единицы UTF-16 (§3.1), т. Е. Они ограничены значениями от \u0000 до \uffff. Дополнительные символы должны быть представлены в виде суррогатной пары в последовательности символов или в виде целого числа, в зависимости от API, с которым они используются.
9.6.4. Предопределенные типы аннотаций
Несколько типов аннотаций предопределены в библиотеках платформы Java SE. Некоторые из этих предопределенных типов аннотаций имеют особую семантику. Эта семантика указана в этом разделе. Этот раздел не предоставляет полную спецификацию для предопределенных аннотаций, содержащихся здесь; это роль соответствующих спецификаций API. Здесь указана только та семантика, которая требует особого поведения со стороны компилятора Java или реализации виртуальной машины Java.