Java 8 default-Methoden Merkmale : sicher?

Ist es ein Sicheres Verfahren zu verwenden, Standard Methoden wie ein armer Mann-version von Merkmalen in Java 8?

Manche behaupten, er kann machen pandas traurig , wenn Sie Sie verwenden, nur um der es, weil es cool ist, aber das ist nicht meine Absicht. Es ist auch oft daran erinnert, dass Standard-Methoden wurden eingeführt, um die Unterstützung API-Entwicklung und Abwärtskompatibilität, das ist wahr, aber das macht es nicht falsch oder verdreht, um Sie als Merkmale per se.

Habe ich die folgenden praktischen Anwendungsfall in den Sinn:

public interface Loggable {
    default Logger logger() {
        return LoggerFactory.getLogger(this.getClass());
    }
}

Oder vielleicht definieren Sie ein PeriodTrait:

public interface PeriodeTrait {
    Date getStartDate();
    Date getEndDate();
    default isValid(Date atDate) {
        ...
    }
}

Admitedly, Zusammensetzung verwendet werden könnten (oder auch Helfer-Klassen), aber es scheint, Ausführlicher und unübersichtlich und nicht zulassen, profitieren von Polymorphismus.

So, ist es ok/safe Standard-Methoden als grundlegende Merkmale, oder sollte ich mir sorgen über unvorhergesehene Nebenwirkungen?

Mehrere Fragen auf, SO sind im Zusammenhang mit Java vs. Scala Züge; das ist nicht der Punkt hier. Ich verlange nicht bloß für Stellungnahmen. Stattdessen, ich bin auf der Suche nach einer autorisierenden Antwort oder zumindest das Feld Einsicht: wenn du bereits mit Standard-Methoden als Merkmale auf Ihre corporate Projekt, hat es sich als eine timebomb?

  • Es scheint mir, als könnten Sie die gleichen Vorteile von Vererbung einer abstrakten Klasse, und Sie müssen nicht sorgen zu machen pandas Weinen... Der einzige Grund, ich kann sehen, zu verwenden eine Standard-Methode in einer Schnittstelle ist, dass Sie die Funktionalität und nicht ändern können eine Reihe von legacy-code, der basierend auf der Schnittstelle.
  • Ich Stimme mit @infosec812 über die Erweiterung einer abstrakten Klasse definiert seine eigenen statischen logger-Feld. Wäre es nicht Ihre logger () - Methode instanziiert ein neues logger-Instanz jeder Zeit die genannte?
  • Für die Anmeldung, möchten Sie vielleicht zu schauen Projectlombok.org und der @Slf4j-annotation.
  • Verwandte Frage: Warum ist das "Finale" nicht erlaubt in Java 8 interface-Methoden?
InformationsquelleAutor youri | 2015-02-23
Schreibe einen Kommentar