2017-05-14 32 views
-1

如何将所有其他注释大写并在某处定义,但@interface不是?这是否意味着它是一个关键字?@interface是Java中的关键字吗?

+0

“为什么”很难,因为它取决于语言设计师的兴致。我的猜测是:'@interface'重新使用了已经定义的小写字母“interface”。其他注释以大写字母开头,因为它们基于类的概念,在Java中按惯例是大写的。例如。 'public @interface覆盖{}'。 – markspace

+1

@markspace注解是接口的类型(不是*类型*的技术含义),这就是为什么他们使用相同的关键字。注释名称以大写字母开头,因为它的名称是* type *(class,interface,enum,annotation)。 '@ inteface'声明不是注释。 – user1803551

回答

3

@interface是在Java中的关键字?

不完全是。关键字是interface。当您在源代码中编写@interface时,它相当于编写@ interface。 (注意@interface关键字之间的空间。)

这在JLS 9.6.与附加注释解释:

“请注意,在符号(@)和关键字interface是不同令牌,可以用空格将它们分开,但这是一种风格问题,不鼓励。“


怎么会......

那么他们用@interface因为注释是一种接口。 JLS这样说。

至于为什么interface而不是Interface,这是一个妥协:

  • ,一方面,interface是Java中的关键字,并且他们需要使用关键字,而不是一个普通的标识符上下文。

  • 另一方面,您在@interface和常规注释之间有明显的不一致...... Java样式规则说注释标识符应该以大写字母开头。

  • 在另一方面再次,他们不能使用@annotationannotation因为annotation不是保留以备将来使用的关键字回来时的Java是一个年轻的语言。

我猜他们说的是解决了这个......嗯...... @interface是不是在所有的注释(这是不是),以及明显不一致是因为程序员觉得既然@interface“看起来像“它是一个注释。从这个POV中,小写字母是用户的语义线索......这不是他们认为的!

但是,这是猜测。实际设计决策时我们并不在场。

+0

你在坏的地方得到了一个换行符 - 你至少在我的屏幕上看不到'@interface'中的空格。 – user1803551

+0

固定。 (它在我的屏幕上看起来OK!) –

+0

现在看起来不错。 (我猜这取决于屏幕!) – user1803551

2

是@interface在Java中的关键字?

没有,根据JLS 3.9. Keywordsinterface是一个关键字,而不是@interface

如何将所有其他注释大写和定义在某处,但@interface不是?这是否意味着它是一个关键字?

JLS 9.6. Annotation Types

注释类型声明指定一个新注释类型,一种特殊的接口类型。为了将注释类型声明与正常的interface声明区分开来,关键字接口前面有一个符号(@)。

您通常在@符号之后大写字母,因为这是注释的名称。在定义注释时,您只需使用@interface组合。这与类和其他接口(和枚举)相同,关键字class/interface/enum是lowecase,但类型(应该)的名称以大写字母开头。

public @interface MyAnnotation {...} 
//  ^lowercase ^uppercase 

然后

@MyAnnotation 
// ^uppercase 
    public class MyClass {...} 
+0

“您通常在@符号后面加上大写字母”但您通常不会将关键字'interface'大写。 –

+0

@LewBloch是的,这就是我所说的。 – user1803551

+0

是的,除了调用'@ interface'“一个”标识符。它实际上是两个令牌,它们都不是一个标识符。 –