wake-up-neo.com

Warum sollte man eine Java interface-Methode als abstrakt deklarieren?

Ich habe heute die Refactoring-Funktion "Pull Interface" von Eclipse verwendet, um ein Interface zu erstellen, das auf einer vorhandenen Klasse basiert. Das Dialogfeld bot an, alle neuen Methoden der neuen Schnittstelle als "abstrakte" Methoden zu erstellen.

Was wäre der Nutzen davon?

Ich dachte, dass die Tatsache, dass Sie Schnittstellenmethoden als abstrakt deklarieren dürfen, ein überflüssiges und harmloses Merkmal der Sprache ist, das nicht besonders gefördert wird.

Warum würde Eclipse einen solchen Stil unterstützen oder warum würde sich jemand freiwillig dafür entscheiden?

Klarstellung: Ich frage nicht, warum Schnittstellenmethoden abstrakt sind, das liegt auf der Hand. Ich frage, warum man sie explizit als abstrakt markieren würde, da sie sowieso abstrakt sind, wenn sie sich in einer Benutzeroberfläche befinden.

139
Uri

Laut Java Language Specification ist das Schlüsselwort abstract für Interfaces veraltet und sollte nicht mehr verwendet werden. (Abschnitt 9.1.1.1)

Angesichts der Neigung von Java zur Abwärtskompatibilität bezweifle ich jedoch, dass es jemals einen Unterschied machen wird, ob das Schlüsselwort abstract vorhanden ist.

143
jdmichal

"Der Vorteil davon" (Hinzufügen einer Zusammenfassung zur Deklaration von Schnittstellenmethoden) in Eclipse wäre ein altes Kompatibilitätsproblem mit jdt Eclipse-Compiler in jdk1.

Seit 1.4 enthalten JDK-Bibliotheken keine abstrakten Standardmethoden mehr (für abstrakte Klassen, die Schnittstellen implementieren).
Dies täuscht die Eclipse 1.3-Compiler-Diagnose, da ihre Implementierung von ihrer Existenz abhängt.
Beachten Sie, dass Javac 1.3 die Ausführung von 1.4-Bibliotheken insgesamt ablehnt (unter Verwendung der Option -bootclasspath).

Da der Eclipse-Compiler wahrscheinlich die Konformitätsstufe 1.4 hat (siehe Workbench>Preferences>Java>Compiler>JDK Compliance) oder verwenden Sie mindestens 1.3-Klassenbibliotheken, wenn Sie den 1.3-Kompatibilitätsmodus verwenden. In den meisten aktuellen Eclipse-Projekten ist das Vorhandensein von "abstract" nicht erforderlich.

38
VonC

Aus Java SE 7 JLS (Java Language Specification): "Es ist zulässig, aber aus Gründen des Stils nicht empfehlenswert, den öffentlichen und/oder abstrakten Modifikator für eine in einer Schnittstelle deklarierte Methode redundant anzugeben. "

Für Java SE 5. : "Aus Kompatibilitätsgründen mit älteren Versionen der Plattform Java) ist es zulässig, den abstrakten Modifikator aus Gründen des Stils jedoch nicht redundant anzugeben für in Interfaces deklarierte Methoden. "

37
Will

Laut JLS sind Methoden in Interfaces standardmäßig abstrakt, sodass das Schlüsselwort redundant ist. Wenn ich das wüsste, würde ich es niemals benutzen, um "Präsentationsunordnung zu vermeiden".

9
Daniel Hiller