在接口类型上使用注释有什么好处?

ove*_*nge 5 java types annotations java-8

在此示例中,注释类型(@interface)下面:

@interface ClassPreamble {
       String author();
       String date();
       int currentRevision() default 1;
       String lastModified() default "N/A";
       String lastModifiedBy() default "N/A";
       // Note use of array
       String[] reviewers();
    }
Run Code Online (Sandbox Code Playgroud)

被编译为interface键入:

interface annotationtype.ClassPreamble extends java.lang.annotation.Annotation{
    public abstract java.lang.String author();
    public abstract java.lang.String date();
    public abstract int currentRevision();
    public abstract java.lang.String lastModified();
    public abstract java.lang.String lastModifiedBy();
    public abstract java.lang.String[] reviewers();
}
Run Code Online (Sandbox Code Playgroud)

因此,注释类型interface在运行时之前被编译为类型.

在java中,在类型上使用注释类型(@interface)有什么好处interface

Bri*_*etz 6

接口是一种用于对象建模的技术,允许对象实现与多种类型相关联的行为(但不是状态).

注释是一种在代码中嵌入类型化元数据的技术; 此元数据旨在供工具(测试框架,代码生成器等)使用,但它们没有语言级语义.您可以将它们视为附加到某些程序元素的结构化/类型化注释,可以通过反射访问它们.

在引擎盖下,注释被实现为接口,这在很大程度上是为了方便起见,但是相似性可能更有助于理解它们的用途.

  • 枚举类型是将模式拉入语言的示例.如果Java没有枚举类,你仍然可以通过编码模式获得完全相同的效果 - 只是更详细.枚举编译到类并不是偶然的意外,因为"枚举模式"是由类基本表达的.注释似乎与我截然不同. (2认同)

das*_*ght 5

如果手动执行编译器自动执行的操作,则不会定义注释.根据Oracle文档,

手动扩展[ java.lang.annotation.Annotation] 的接口不定义注释类型.

因此,@interface需要语法来在Java中定义注释.