为什么java注释?

我想问为什么java注释使用了这么多…我知道他们替换了例如jpa中的xml配置,但是为什么这种配置会被使用呢? 考虑这段代码:

@Entity class Ent{ // some fields } //... somewhere in the other file far far away class NonEnt{ // whatever here } 

现在,当我尝试将它放在持久化上下文中时,使用EntityManager的persist方法,我会在尝试持久化NonEnt实例时遇到运行时错误(更好的是获得编译错误)。 对我来说有明显的解决方案,强制实体实现一些无方法接口,而不是使用@Annotations。 但这在框架设计师中并不流行,这个解决方案的缺点是什么?
谢谢回答…

与标记接口相比,注释具有以下优点:

  • 它们可以参数化
  • 它们更细粒度 – 您不仅可以将它们附加到类,还可以附加到其他类元素(字段,方法,方法参数等)

据说注释也不那么具有侵入性 ,但这一点是品味和有争议的问题。

也可以看看:

  • 注释 (官方JDK文档)
  • Java中标记接口的用途是什么?

与强制客户端实现接口或扩展类相比,使用注释要小得多。

对我来说有明显的解决方案,

你所描述的被称为“标记界面”,它是滥用界面概念。 我怀疑你认为显而易见的唯一原因是因为Serializable – 它只存在,因为当时没有注释。

强制实体实现一些无方法接口,而不是使用@Annotations。 但这在框架设计师中并不流行,这个解决方案的缺点是什么?

它的优点是什么? 注释具有巨大的优势,它们可以具有参数,并且它们更精细。 标记接口仅适用于类级别。

引用java教程:

注释提供有关不属于程序本身的程序的数据。 它们对它们注释的代码的操作没有直接影响。

注释有许多用途,其中包括:

  • 编译器的信息 – 编译器可以使用注释来检测错误或抑制警告。
  • 编译时和部署时处理 – 软件工具可以处理注释信息以生成代码,XML文件等。
  • 运行时处理 – 可以在运行时检查某些注释。

正如您所看到的,注释是一种在java中指定有关您的类型的元数据的方法,包括接口,它们绝不是它们的替代品。

当您想要向类,方法或实例变量添加一些附加信息时,Java注释非常有用。 有很多库大量使用这些注释。 这些注释使代码简单易读,并且能够在运行时更改代码。

例如,如果您使用了lombok库,它在编译时创建setter,getter和构造函数,并为您节省代码和时间。

当编译器执行代码时,lomok搜索标记有@Setter或@Getter注释的所有字段,并为该类中的该字段添加setter和getter。

另一个例子是Junit测试运行器。 junit如何区分测试类中的正常辅助方法和测试。 为了区分它们使用@Test注释。

本教程将介绍如何使用Java注释创建自己的测试运行器。