El control sobre cuándo se hacen accesibles sus metadatos es diferente entre los dos idiomas.
Java proporciona la java.lang.annotation.Retention anotación y java.lang.annotation.RetentionPolicy enumeración para controlar cuándo metadatos anotación es accesible. Las opciones varían desde Runtime
(más común: metadatos de anotación conservados en archivos de clase), hasta Source
(metadatos descartados por el compilador). Etiquetar su interfaz de anotación personalizada con esto - por ejemplo:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.CLASS)
public @interface TraceLogging {
// etc
}
permitiría a reflexionar sobre su encargo TraceLogging
anotación en tiempo de ejecución.
C# utiliza el atributo ConditionalAttribute que se controla a partir de los símbolos de tiempo de compilación. Así que el ejemplo análogo en C# es:
[Conditional("TRACE")]
public class TraceLoggingAttribute : Attribute
{
// etc
}
que haría que el compilador para escupir los metadatos personalizados para su TraceLogging
atributo sólo si se define el símbolo TRACE
.
NB. los metadatos de atributo están disponibles en tiempo de ejecución de forma predeterminada en C#; esto solo es necesario si desea cambiar eso.
Aunque he visto apt, en realidad no uso la API APT; mi código usa reflexión (y un doclet) para hacer su trabajo (en lugar de usar APT para generar un conjunto de elementos intermedios durante la compilación) .) Por lo tanto, creo que no estoy preocupado por esta capacidad faltante. Sigan viniendo :) – Jared
Jon - solo hace un clic para avisar que hay una recompensa de 100 puntos en esta pregunta - si tiene más tiempo para pasar dando una respuesta más completa (y los puntos valen la pena) - Me gustaría ciertamente bienvenido :) ¡Gracias! – Jared
Sí, como Jon realmente necesita esa recompensa de 100 puntos :) – ArielBH