Non so che le annotazioni possano mai sostituire un'interfaccia, ma posso vedere il fascino. Tutto dipende però dalle implementazioni.
Le annotazioni forniscono metadati per descrivere ulteriormente il codice, che un utente (la maggior parte delle volte) interpreta in fase di esecuzione utilizzando le riflessioni. Utilizzando un'interfaccia, questo contratto di implementazione è chiaramente definito.
si potrebbe avere:
interface CrudDao<T> {
Serializable create(T t);
T read(Serializable id);
void update(T t);
void delete(T t);
}
questo sarebbe un contratto di difficile attuazione, e sarebbe probabilmente incorrere in una sorta di metodo di concatenamento.
Invece si potrebbe fare qualcosa di simile:
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 }
}
Lo svantaggio è che sarebbe complicato da utilizzare:
class CrudFactory {
long create(Class clazz, Object obj) {
// loop through methods
// find method with @Create
// call method
}
}
annotazioni in questo esempio potrebbe essere eccessivo la maggior parte del tempo, IMO . C'è qualcosa da dire su un contratto ben definito e ben documentato.
Sono un po 'confuso su cosa intendi utilizzando le interfacce per aggiungere campi a una classe. Intendi usare un'annotazione per aggiungere metodi e metodi getter-setter? – Uri
Sarebbe in grado di condividere lo snippet anche qui? Ci aiuterà sicuramente, a capire la tua domanda. –