类级别注释与接口

mko*_*yak 7 java annotations

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

我的问题:何时使用注释将新字段添加到类中,而不是使用接口.这有什么好处和缺点?

Dro*_*roo 10

我不知道注释会取代界面,但我可以看到它的吸引力.这完全取决于实现.

注释提供元数据以进一步描述代码,消费者(大多数时候)使用反射在运行时解释代码.使用接口,明确定义了该实现合同.

你可以有:

interface CrudDao<T> {
   Serializable create(T t);
   T read(Serializable id);
   void update(T t);
   void delete(T t);
}
Run Code Online (Sandbox Code Playgroud)

这将是一个繁琐的实施合同,并可能会产生某种方法链接.

相反,你可以这样做:

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 }
}
Run Code Online (Sandbox Code Playgroud)

缺点是使用起来很麻烦:

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

在这个例子中的注释在大多数情况下都是过度的,IMO.关于明确定义的,记录良好的合同,有一些话要说.