2010-03-26 21 views
7

Quiero anotar una clase dinámicamente para que sea la más genérica posible:anotación Clase dinámica

public class Test<T> { 

    @XmlAttribute(name = dynamicvalue) 
    T[] data; 

    public Test(String dynamicvalue) { 
    } 
} 

¿Hay alguna manera de lograr algo como esto.

TA

Respuesta

4

No. Las anotaciones son información estática de nivel de clase y que no pueden ser influenciadas por los valores de campos de instancia (no, no pueden influenciados por los valores de los campos estáticos tampoco).

1

Puede crear nuevas clases en tiempo de ejecución cargando un nuevo bytecode, por lo que en teoría debería ser posible (recuerde, las anotaciones están asociadas a la clase, no al objeto). Y puede usar una API como Java Assist para ayudar a crearlas. Hay un annotation package que puedes mirar.

No será fácil.

+1

Si sigue esta ruta, tenga en cuenta que igual tendrá que crear varias clases con diferentes anotaciones. Este tipo de - derrota el propósito de tener una clase común. –

+0

Supongo que jlanza necesita hacer esto para tratar con alguna API externa (tal vez un serializador XML), de lo contrario solo usaría una variable de instancia. –

+0

La idea era crear una clase genérica para un elemento y luego usar la anotación de la clase padre para heredar, pero cambiando el nombre cambiando automáticamente. El valor dinámico depende de la clase Template. – jlanza