Verwenden Sie Fälle zum Implementieren von Anmerkungen

Was sind gültige Anwendungsfälle für die Implementierung von Anmerkungen?

Wenn ich hauptsächlich auf Annotationen basierende Konfigurationssysteme entwerfe, muss ich gelegentlich Klassen erstellen, die Annotationen für die Codegenerierung oder programmatische Konfiguration implementieren.

Die Alternative besteht darin, die in Anmerkungen enthaltenen Daten in DTOs zu spiegeln, was wie ein Overhead erscheint.

Hier ist ein Beispiel

public enum IDType {
    LOCAL,
    URI,
    RESOURCE;
}

@Documented
@Target( { METHOD, FIELD })
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface Id {
    /**
     * @return
     */
    IDType value() default IDType.LOCAL;
}

mit der Implementierung

public class IdImpl implements Id{

    private final IDType idType;

    public IdImpl(IDType idType){
        this.idType = idType;
    }

    @Override
    public IDType value() {
        return idType;
    }

    @Override
    public Class<? extends Annotation> annotationType() {
        return Id.class;
    }

}

Ich erhalte Compiler-Warnungen, aber es scheint für viele Anwendungsfälle ein gültiges Werkzeug zu sein.

Die Warnung für das obige Beispiel lautet

Der Annotationstyp Id sollte nicht als Superinterface für IdImpl @ verwendet werde

Bearbeitet:

Ich habe gerade dieses Beispiel von @ gefund Guice :

bind(CreditCardProcessor.class)
    .annotatedWith(Names.named("Checkout"))
    .to(CheckoutCreditCardProcessor.class);

Sieh dir das anJavadoc von Names.

Hat jemand Informationen darüber, warum diese Einschränkung besteht, oder hat jemand andere Anwendungsfälle im Auge?

Antworten auf die Frage(8)

Ihre Antwort auf die Frage