Java 与接口类型相比,使用注释的优势是什么?

Java 与接口类型相比,使用注释的优势是什么?,java,types,annotations,java-8,Java,Types,Annotations,Java 8,在这种情况下,注释类型(@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();

在这种情况下,注释类型(
@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();
}
因此,注释类型在运行前被编译为
接口
类型


在java中,使用注释类型(
@interface
)比使用
接口
类型有什么好处?

如果您手动执行编译器自动执行的操作,则不会定义注释。根据,

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


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

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

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


实际上,注释是作为接口实现的,主要是为了方便起见,但在理解它们的用途时,这种相似性可能更容易混淆,而不是帮助理解它们的用途。

关于翻译,枚举类型编译为“final class”。但枚举类型的用途与类不同。”“类”用于对象建模。这是一个很好的类比吗?枚举类型就是一个将模式拉入语言的例子。如果Java没有枚举类,您仍然可以通过对模式进行编码来获得完全相同的效果——只需更加详细。枚举编译成类并不是偶然的,因为“枚举模式”基本上是由类表示的。注释对我来说似乎很不一样。你的观点是:“允许对象实现行为的接口”。我可以改为“接口允许对象实现外围(非核心)行为”吗?取自参考项18:接口是定义混合的理想选择。例如:
compareTo()
接口Comparable的行为@overexchange,这会让它走得太远。接口也有助于定义核心行为!例如,列表是一个接口。“X对Y有好处”并不意味着Y是X的唯一好处,甚至更重要的好处。所以,虽然Comparable和friends是一个很好的类别,但List、JDBC连接、Stream和其他许多接口都做得很好。
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();
}