2008-12-18 14 views
7

me han escrito una anotación de Java que tiene este aspecto:puedo generar un error de tiempo de compilación basado en el tipo de campo que se está anotada

@Retention(RetentionPolicy.RUNTIME) 
@Target(ElementType.FIELD) // can I further limit this to only fields of type DomainObject? 
public @interface Owns { 
} 

Después de mirar brevemente en torno a que no podía ver si había una forma de limitar aún más el uso de esta anotación para que solo los campos de un tipo específico puedan ser anotados. Esta anotación es personalizada para nuestro dominio y solo se puede usar en instancias de nuestra clase de objeto de dominio base.

¿Alguien sabe cómo aplicar esto en tiempo de compilación?

¡Gracias por cualquier ayuda!

Respuesta

8

Puede emitir un error en un annotation processor (deberá usar un private API si desea el soporte de Java 5). Puede usar el Messager que obtiene del ProcessorEnvironment pasado a init.

La eficacia de esto puede depender de su cadena de herramientas. Debería estar bien si usa javac para compilar por la línea de comando o mediante un script de compilación. En mi versión de Eclipse, tuve que habilitar manualmente los procesadores de anotación para el proyecto (a través de la configuración del proyecto) y los errores no aparecían en ningún lugar obvio. (Los complementos de anotación JDT tienen puntos de extensión que permiten una mejor integración con el IDE si desea proporcionar soporte personalizado). Vale la pena comprobar con herramientas de uso común, especialmente si necesita admitir entornos de desarrollo arbitrarios.

+0

Esa es la información que estaba buscando. Voy a profundizar y ver si vale la pena agregar estos controles. Gracias. –

0

Creo que esto no es aplicable en tiempo de compilación. Si desea asegurarse de que no se encuentra en ningún campo inapropiado, deberá verificar el tiempo de ejecución/carga.

Cuestiones relacionadas