аннотации уровня класса по сравнению с интерфейсами

Я смотрю на некоторый код, где аннотации уровня класса используются для 'добавления' свойств к определенным классам, позже использующее отражение, к этим свойствам получают доступ и используют.

Мой вопрос: Когда это соответствующий для использования аннотации для добавления новых полей к классу, вместо того, чтобы использовать интерфейс. Что некоторые преимущества и недостатки к этому?

7
задан mkoryak 10 February 2010 в 04:21
поделиться

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. Есть что сказать о четко сформулированном, хорошо задокументированном контракте.

10
ответ дан 7 December 2019 в 01:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: