567 Stimmen

Warum kann ich eine statische Methode nicht in einer Java-Schnittstelle definieren?

EDIT。 Ab Java 8 sind statische Methoden nun auch in Schnittstellen erlaubt.

Hier ist ein Beispiel:

public interface IXMLizable<T>
{
  static T newInstanceFromXML(Element e);
  Element toXMLElement();
}

Das wird natürlich nicht funktionieren. Aber warum nicht?

Eine der möglichen Fragen wäre, was passiert, wenn Sie anrufen:

IXMLizable.newInstanceFromXML(e);

In diesem Fall sollte meiner Meinung nach einfach eine leere Methode (d. h. {}) aufgerufen werden. Alle Unterklassen wären gezwungen, die statische Methode zu implementieren, so dass sie alle in Ordnung wären, wenn sie die statische Methode aufrufen. Warum ist dies also nicht möglich?

EDIT。 Ich schätze, ich suche nach einer Antwort, die tiefer geht als "weil Java eben so ist".

Gibt es einen bestimmten technischen Grund, warum statische Methoden nicht überschrieben werden können? Das heißt, warum haben die Entwickler von Java beschlossen, Instanzmethoden überschreibbar zu machen, statische Methoden aber nicht?

EDIT。 Das Problem bei meinem Entwurf ist, dass ich versuche, Schnittstellen zu verwenden, um eine Kodierungskonvention durchzusetzen.

Das heißt, die Schnittstelle hat zwei Ziele:

  1. Ich möchte, dass die IXMLizable-Schnittstelle es mir ermöglicht, Klassen, die sie implementieren, in XML-Elemente zu konvertieren (mit Polymorphismus, funktioniert gut).

  2. Wenn jemand eine neue Instanz einer Klasse erstellen möchte, die die Schnittstelle IXMLizable implementiert, wird er immer wissen, dass es einen statischen Konstruktor newInstanceFromXML(Element e) geben wird.

Gibt es eine andere Möglichkeit, dies zu gewährleisten, als einfach einen Kommentar in die Schnittstelle zu setzen?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X