java - 类级别注释与接口(interface)

标签 java annotations

我正在查看一些代码,其中类级别注释用于向某些类“添加”属性,稍后使用反射访问和使用这些属性。

我的问题: 什么时候适合使用注解向类添加新字段,而不是使用接口(interface)。这有哪些优点和缺点?

最佳答案

我不知道注解是否会取代界面,但我可以看出其中的魅力。不过,这完全取决于实现。

注释提供元数据以进一步描述代码,消费者(大部分时间)在运行时使用反射解释这些代码。使用接口(interface),可以明确定义此实现契约。

你可以:

interface CrudDao<T> {
   Serializable create(T t);
   T read(Serializable id);
   void update(T t);
   void delete(T t);
}

这将是一个实现起来很麻烦的契约(Contract),并且可能会导致某种方法链接。

相反,你可以这样做:

class SomeDao {

   @Create
   long create(SomeEntity e) { // code }

   @Read
   SomeEntity read(long id) { // code }

   @Update
   void update(SomeEntity e) { // code }

   @Delete
   void delete(SomeEntity e) { // code }
}

缺点是使用起来比较麻烦:

class CrudFactory {
    long create(Class clazz, Object obj) {
       // loop through methods
       // find method with @Create
       // call method
    }    
}

IMO,这个例子中的注释在大多数情况下都是矫枉过正的。关于定义明确、记录良好的契约(Contract),有一些话要说。

关于java - 类级别注释与接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2234394/

相关文章:

java - 使用 java 所有者 aeonbits 进行测试

java - 实现注解的用例

java - 如何将 CSV 记录映射到 bean?

java - 淡入淡出 JSP 页面

java - Twitter4j ID 到数组

java - 同时链接多个方法调用?提供的示例

java - arraylist 未存储在 hashmap 中

java - 在 @Column JPA 注释上设置长度属性时有什么作用?

java - 需要 Hibernate 中主键 @OneToOne 映射的示例

java - 标记注释与标记接口(interface)