Контроль над тем, когда ваши метаданные становятся доступными, различается для двух языков.
Java предоставляет аннотацию java.lang.annotation.Retention и java.lang.annotation.RetentionPolicy enum для контроля доступности метаданных аннотации. Выбор может варьироваться от Runtime
(наиболее распространенные - метаданные аннотации, сохраняемые в файлах классов) до Source
(метаданные, отбрасываемые компилятором). Вы помечаете свой пользовательский интерфейс аннотаций с помощью этого - например:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.CLASS)
public @interface TraceLogging {
// etc
}
позволит вам поразмышлять о вашей пользовательской аннотации TraceLogging
во время выполнения.
C # использует атрибут ConditionalAttribute , который определяется символами времени компиляции. Итак, аналогичный пример в C #:
[Conditional("TRACE")]
public class TraceLoggingAttribute : Attribute
{
// etc
}
, что заставит компилятор выплевывать метаданные для вашего пользовательского атрибута TraceLogging
, только если был определен символ TRACE
.
NB. метаданные атрибута доступны во время выполнения по умолчанию в C # - это необходимо, только если вы хотите изменить это.