Was ist die Syntax für Elemente Annotationstyp?

Aaron:

Wie kann ich lesen / verstehen die folgende Anweisung in Java?

Class<?>[] groups() default {};

Class < ? extends Payload>[] payload() default {};

Ich denke , ich kann sie einzeln verstehen , aber ich weiß nicht , ob ich gut Gefühl dafür , was es bedeutet , in seiner Gesamtheit.

Individuell:

  1. Class<?>jede Klasse und Class< ? extends Payload>jede Klasse, die die erstreckt PayloadKlasse
  2. [ ]scheint auf jede Reihe von Klassen zu verweisen. Ist das korrekt?
  3. groups()und payload()sind Methodennamen.
  4. default{} Verwenden Sie diese Option, wenn es keine Implementierung ist?

Ich bin wirklich nicht sicher, wie die oben genannten Aussagen zu verstehen? Jede Hilfe wäre sehr geschätzt.

Flocken:

default {} -> verwenden, wenn es keine Implementierung?

In einer Annotation - Definition können Sie einen Standardwert für einen Parameter angeben. Der {}nach dem Standardwert ist eine Arrayliteral für eine leere Arrays. Man könnte es auch zu einigen nicht leeren Wert gesetzt. Dies funktioniert auch für andere Objekte zu. zB die DataAnmerkung aus lombok , wo ein Standard - String deklariert wird:

public @interface Data {
    String staticConstructor() default "";
}

Klasse jede Klasse und "Class <? Erweitert Payload>" jede Klasse, die die Payload-Klasse erweitert

Ja

[] -> Scheint jede Reihe von Klassen zu verweisen. Ist das korrekt?

Ja

Gruppen () und die Nutzlast () sind Methodennamen.

Sie sind der Name des Parameters in Annotation Deklaration sowie der Name der Getter-Methoden für diese Werte. zB könnten Sie definieren:

@Data(staticConstructor = "of") class Foobar {}

Und später können Sie den Wert erhalten, indem die Getter-Methode erstellt:

Data dataAnnotation = Foobar.class.getAnnotation(Data.class);
String staticConstructor = dataAnnotation.staticConstructor();

Beachten Sie, dass Sie nicht wirklich in der Lage sein, den Wert für eine Annotation in Runtime abzurufen, wenn die Annotation Definition wird auch mit Anmerkungen versehen mit @Retention(RetentionPolicy.RUNTIME)

Ich denke du magst

Origin http://43.154.161.224:23101/article/api/json?id=173701&siteId=1
Empfohlen
Rangfolge