Standard-Rückgabewert der Methode in der Java-Schnittstellen
Während der Arbeit mit Anmerkungen stolperte ich über den folgenden code-Abschnitt (es ist der Ruhezustand @NotNull annotation):
@Target(value = {ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER})
@Retention(value = RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = {})
public @interface NotNull {
@Target(value = {ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER})
@Retention(value = RetentionPolicy.RUNTIME)
@Documented
public @interface List {
public NotNull[] value();
}
public String message() default "{javax.validation.constraints.NotNull.message}";
public Class<?>[] groups() default {};
public Class<? extends Payload>[] payload() default {};
}
Wunderte ich mich über die default
keyword/Konstrukt in die Methode-definition, die ich nie zuvor gesehen habe. Wie ich verstanden habe, Sie können einen Standardwert für diese Methode (oder eine annotation property).
Nun war ich versucht, dieses Konstrukt zu einem normalen interface, aber es scheiterte. Dies würde nicht kompilieren:
public interface DefaultTest {
public String test() default "value";
}
Aber das funktionieren würde:
public @interface DefaultTest {
public String test() default "value";
}
Also meine Frage ist: Ist die default
Stichwort-Anmerkung-spezifische? Und wenn ja, was spricht gegen die Verwendung dieses Konstrukts in normal-interface-Definitionen?
InformationsquelleAutor der Frage MicSim | 2010-09-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Java 8 und ab
Ja, das default-Schlüsselwort kann jetzt verwendet werden über Schnittstellen. Für mehr details siehe Oracle docs.
Die Umsetzung ist etwas anders als das, was Sie dachten. Es wäre:
Java 7 und früheren
Dem default-Schlüsselwort kann nur verwendet werden, für die Anmerkungen.
Wenn Sie möchten, eine Standard-Rückgabewert für eine Schnittstelle, die Sie verwenden müssen, eine abstrakte Klasse statt.
InformationsquelleAutor der Antwort Pace
"Default" Schlüsselwort hier ist nicht Beschriftungs-spezifisch.
Seine feature von java, um Standardeinstellungen für die Implementierung von interface-Methoden.
Müssen dieses Verhalten :
Angenommen wurde zunächst ein interface Fahrzeug wurde definiert, um alle Fahrzeug-funktional-Methoden -
Nun Klassen implementieren dieses Fahrzeug-Schnittstelle implementiert haben, diese abstrakten Methoden.
Nun in Zukunft Fahrzeugs haben die Fähigkeit des Fliegens. So müssen Sie flying-Funktion.
Fügen Sie nun flyingSpeed () - Methode zu-Fahrzeug-Schnittstelle, die Sie ändern müssen alle vorhandenen Klassen zu vermeiden, brechen Sie den code.
Nicht praktikable Lösung.
Für die Abwärtskompatibilität von java, hat die Funktion der Standard-Methode. Damit können Sie neue Methoden, um interface mit default-Implementierung, so dass die bestehenden Klassen würden nicht brauchen, um zu implementieren, die Methode. Und die neue Fahrzeug-Klassen überschreiben die Methoden, wie pro Ihre Notwendigkeit.
Nutzung dieser Weise früheren Klassen von Fahrzeug würde nicht Sie müssen diese Methode implementieren.
Weitere Informationen sehen hier.
InformationsquelleAutor der Antwort gtm.r