【问题标题】:Is the JDK documentation part of the language specification?JDK 文档是语言规范的一部分吗?
【发布时间】:2017-04-26 08:53:40
【问题描述】:

官方Java Language Specification只有一个,所有Java实现都必须遵守。

API 文档怎么样:是否所有 Java 实现都需要遵守 this version 或者实现可以不同地定义某些方法和类的行为,只要它与 JLS 兼容?

让我们举一个具体的例子:Java 实现是否可以包含不接受null 元素的HashMap?

【问题讨论】:

  • 是的,所有 Java SE API 也是规范的一部分。所有实现都必须符合 API 的所有 Javadocs。
  • @ZhekaKozlov 你有来源或参考吗?
  • JLS 定义了 Java 程序在 VM 上的行为方式。 HashMap 不是 VM 的一部分(与 Object 和 Thread 相反),所以 JLS 甚至没有触及它。
  • @assyias 不幸的是,我找不到明确的句子说明它。但我认为,如果您的 Java 平台实现具有不同的 HashMap 行为,那么它将无法通过 Java 兼容性测试(JCK)。

标签: java jls


【解决方案1】:

我相信,是的。

仔细研究后,我认为它不是。

正如p.1.4 中的 JLS 8 所述:

1.4。与预定义类和接口的关系

如上所述,本规范经常提到 Java 的类 SE平台API。特别是有些班级有特殊的 与 Java 编程语言的关系。例子包括 类,例如 Object、Class、ClassLoader、String、Thread 和 包 java.lang.reflect 等中的类和接口。 本规范限制此类类的行为和 接口,但没有为它们提供完整的规范。 读者可参考 Java SE 平台 API 文档。

一方面,他们声明,JLS 文档没有提供完整的规范,并将读者发送到 Java SE 平台 API 文档。

另一方面,当提到 Java SE 的一些 API(复数形式)时,JLS 中有很多地方。此外,似乎 JLS 不包含指向特定 Java SE API 规范的链接:

3.1. Unicode

Java SE 平台的一些 API,主要在 Character 类中,使用 32 位整数将代码点表示为单独的实体。 Java SE 平台提供了在 16 位和 32 位表示。

3.10.4. Character Literals

字符文字只能表示 UTF-16 代码单元(第 3.1 节),即 它们仅限于从 \u0000 到 \uffff 的值。补充 字符必须表示为一个代理对 char 序列,或作为整数,取决于它们使用的 API 与。

9.6.4. Predefined Annotation Types

Java 的库中预定义了几种注解类型 SE平台。其中一些预定义的注释类型具有特殊的 语义。这些语义在本节中指定。这个部分 不提供预定义的完整规范 此处包含的注释; 那是适当的作用 API 规范。只有那些需要特殊的语义 Java 编译器或 Java 虚拟机的行为 此处指定了实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-10
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多