【问题标题】:class level annotations vs interfaces类级别注释与接口
【发布时间】:2010-02-10 04:21:44
【问题描述】:

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

我的问题: 什么时候适合使用注解向类添加新字段,而不是使用接口。这有什么好处和坏处?

【问题讨论】:

  • 我对您使用接口向类添加字段的意思有点困惑。你的意思是使用注解来添加方法和getter-setter方法?
  • 你也可以在这里分享sn-p吗?它肯定会帮助我们理解您的问题。

标签: java annotations


【解决方案1】:

我不知道注释会取代界面,但我可以看到它的魅力。不过,这一切都取决于实现。

注解提供元数据来进一步描述代码,消费者(大部分时间)在运行时使用反射来解释这些代码。使用一个接口,这个实现契约被清晰地定义了。

你可以:

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

这将是一个繁琐的合约实现,并且可能会导致某种方法链接。

相反,您可以执行以下操作:

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,这个例子中的注释在大多数情况下都是多余的。关于明确定义、有据可查的合同,有一些话要说。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-24
    • 2017-10-23
    • 2020-05-06
    • 2018-04-22
    • 2010-09-13
    • 1970-01-01
    相关资源
    最近更新 更多