2016-06-30 7 views
2

Ich lese this Frage. Die Antwort besagt, dass wir selbst in Java 8 (wo wir Standardmethoden in Schnittstellen haben können) keine Standardkonstruktoren haben können. Und es sagt, dass es keinen Sinn macht.Warum nicht Standardkonstruktoren in Java 8?

Kann jemand erklären, warum es keinen Sinn macht oder warum auch immer es keine Unterstützung für Standardkonstruktoren in Java 8 gibt?

+3

Warum möchten Sie eine Schnittstelle instanziieren können? –

+4

Konstruktoren haben in der Regel Member-Variablen eingerichtet, die eine Schnittstelle nicht hat. Was würde dieser Standardkonstruktor normalerweise tun? Außerdem kann eine Klasse mehrere Schnittstellen implementieren - welcher Standardkonstruktor würde Ihre Klasse erben? – slipperyseal

+0

Auch nicht für diese Schnittstelle kann es von konkreten untergeordneten Objekten vererbt werden, genauso wie der Konstruktor einer abstrakten Klasse. –

Antwort

3

Der Hauptzweck eines Konstruktors besteht darin, eine Instanz eines definierten Typs bereitzustellen, die an einer Schnittstelle keinen Sinn ergibt, da der Hauptzweck einer Schnittstelle die Bereitstellung von Verträgen zwischen den Komponenten im Code ist.

Wie für Standardkonstruktoren, macht es wirklich keinen Sinn, da eine Standardmethode Logik hat, welche Art von Logik würden Sie für einen Standardkonstruktor deklarieren?

+2

auch, Standardmethoden lösen ein bestimmtes Problem. Standardkonstruktoren würden wahrscheinlich nur Probleme verursachen, wenn sie sogar implementiert werden könnten und mit den Regeln des Java-Typsystems – slipperyseal

+0

@SlipperySeal arbeiten könnten. Welches ist das spezifische Problem, das Standardmethoden lösen? –

+3

@SupunWijerathne aus der Dokumentation: "Standardmethoden ermöglichen es Ihnen, den Schnittstellen Ihrer Bibliotheken neue Funktionalität hinzuzufügen und binäre Kompatibilität mit Code zu gewährleisten, der für ältere Versionen dieser Schnittstellen geschrieben wurde." – slipperyseal

0

Konstruktoren von was? Nur Klassen haben Konstruktoren, die Instanzen erstellen.

Wenn eine Schnittstelle Methoden, die alle Standardimplementierungen haben, können Sie eine Instanz wie folgt erstellen:

MyFace obj = new MyFace(){}; 

Es scheint, Sie haben sind klagend zu kodieren zwei zusätzliche Zeichen {}.

+0

Thnx für die Antwort. Aber ich bekomme keinen Punkt. :( –

+1

Ich bin nicht sicher, ob dies wirklich eine "Instanz" der Schnittstelle erstellt. Sie erstellen wirklich eine Inline-Implementierung. –

+0

Mit dem Standardkonstruktor der Schnittstelle würde hypothetischer Code wie MyFace vermieden werden. Obj = new MyFace() {}; obj.init(); ', also ein bisschen mehr als nur' {} ', besonders wenn das Aufrufen von init für die Implementierung obligatorisch wäre. – hyde