2010-02-10 10 views
6

Estoy buscando un código donde las anotaciones de nivel de clase se utilizan para 'agregar' propiedades a ciertas clases, más tarde mediante el uso de la reflexión se accede y se utiliza.anotaciones de nivel de clase vs interfaces

Mi pregunta es: Cuándo es apropiado usar una anotación para agregar nuevos campos a una clase, en lugar de utilizar una interfaz. ¿Cuáles son algunos beneficios y desventajas de esto?

+0

Estoy un poco confundido acerca de lo que quiere decir con el uso de interfaces para agregar campos a una clase. ¿Quiere decir usar una anotación para agregar métodos y métodos getter setter? – Uri

+2

¿Podría compartir el fragmento aquí también? Definitivamente nos ayudará a comprender tu pregunta. –

Respuesta

8

No sé si las anotaciones reemplazarán una interfaz, pero puedo ver el encanto. Sin embargo, todo depende de las implementaciones.

Las anotaciones proporcionan metadatos para describir mejor el código, que un consumidor (la mayoría de las veces) interpreta en tiempo de ejecución mediante reflexiones. Usando una interfaz, este contrato de implementación está claramente definido.

Usted podría tener:

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

Este sería un contrato complicado de implementar, y que probablemente hagan incurrir en algún tipo de método de encadenamiento.

su lugar se podría hacer algo como:

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 } 
} 

El inconveniente es que sería engorroso de usar:

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

Anotaciones en este ejemplo sería una exageración la mayoría de las veces, la OMI . Hay algo que decir sobre un contrato claramente definido y bien documentado.

Cuestiones relacionadas