新的Java 8+分隔符(标点符号) - 它们如何/在哪里使用?

问题描述 投票:4回答:2

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

...   @   ::

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

分离器::用于形成method reference expressions

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

搜索有关Java 8+分隔符的问题和答案我什么也没找到,这解释了新分隔符的用法。

两个分离器...@分开了什么?它们是如何使用的?

java syntax java-8 java-7 lexical
2个回答
3
投票

首先,正如你所注意到的那样,...出现在Java 7中。(我认为它是在Java 5中引入的!)但是在Java 8中,它们明确地将它列为“分隔符”标记之一。

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

两个分隔符......,@分开了什么?

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

笔记:

  1. 在JLS 11第3.1节中,规范定义了一个替代术语“标点符号”。丑陋,但更准确。)
  2. JLS将区分“分离器”与不分离的“分离器”区分开来是没有用的。术语“分隔符”在规范的其余部分中很难使用,当然也不会在任何暗示分离的上下文中使用。
  3. “分隔符”没有分离的先例。现有的令牌(){}[]也不是真正的分隔符。他们的目的是开始或结束构造。
  4. <>令牌也有点奇怪。词法语法称它们为运算符,但在某些情况下它们充当(松散)分隔符。

不要试图读太多。


0
投票

你链接中的首句说

本章规定了Java编程语言的词法结构。

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.