新的 Java 8 个以上的分隔符(标点符号)- how/where 它们被使用了吗?

new Java 8+ separators (punctuators) - how/where are they used?

Java 8 的 JLS 引入了三个新的 separators

...   @   ::

省略号 (...) 用作“方法或构造函数的最后一个形式参数”。但是 Java 7 的 JLS 已经将此 formal parameter 描述为 变量参数 。没有提到它作为分隔符。

分隔符::用于组成method reference expressions.

@ 的意思是“将注释类型声明与普通接口声明区分开来”,因此是 annotation type declaration 的一部分。注释已经是 Java 7 的 JLS 的一部分。我看不到“at-sign”的其他用法。

搜索有关 Java 8+ 分隔符的问题和答案,我一无所获,这解释了新分隔符的用法。

两个分隔符...@分别是什么?它们是如何使用的?

首先,正如您所说,... 出现在 Java 7 中。(我认为它是在 Java 5 中引入的!)但是 Java 8他们明确地将其列为 "separator" 标记之一。

我认为这没有任何实际意义。这只是编辑更正。

What do the both separators ..., @ separate?

他们并没有真正分开任何东西。它们被归类为 "separators",因为它们不是运算符、文字、标识符或关键字。

备注:

  1. 在 JLS 11 第 3.1 节中,规范定义了一个替代术语 "punctuator"。丑陋,但更准确。)

  2. JLS 区分 "separators" 和不区分是没有用的。术语 "separator" 在规范的其余部分几乎没有使用,当然也没有在任何暗示分离的上下文中使用。

  3. "separators"不分开是有先例的。现有标记 (){}[] 也并不真正用作分隔符。它们的目的是开始或结束构造。

  4. <> 标记也有点奇怪。词法语法称它们为运算符,但在某些上下文中它们充当(松散的)分隔符。

不要试图对此解读太多。

你 link 中最上面的一句话说

This chapter specifies the lexical structure of the Java programming language.

这就是重点。它是 Java 语言 语法 的(半正式)描述。我们在这里 不是 谈论语义,它只是 "wording"。描述 Java 编程语言的 语法 中的不同元素。

你可以在 public foo(Bar... vararg)

中说
  • (将方法名与参数列表分开
  • ...将参数类型和参数名分开

您可能需要深入研究 Java 源代码解析的 方式 才能了解 ... 被列为分隔符的原因。含义:该术语源自解析器将如何处理 ...,不一定是语义含义。