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:
Class<?>
jede Klasse undClass< ? extends Payload>
jede Klasse, die die erstrecktPayload
Klasse[ ]
scheint auf jede Reihe von Klassen zu verweisen. Ist das korrekt?groups()
undpayload()
sind Methodennamen.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.
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 Data
Anmerkung 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)