2016-09-26 3 views
1

javax.json documentationWarum javax.json nur Schnittstellen enthält?

Ein Beispiel aus der Dokumentation:

JsonArray value = Json.createArrayBuilder() 
    .add(Json.createObjectBuilder() 
     .add("type", "home") 
     .add("number", "212 555-1234")) 
    .add(Json.createObjectBuilder() 
     .add("type", "fax") 
     .add("number", "646 555-4567")) 
    .build(); 

Aber JsonArray ist eine Schnittstelle, keine Klasse, und der Typ einer Variablen kann nicht eine Schnittstelle sein. Also wo ist class JsonArray? Ich denke, das Paket enthält es, aber warum ist es nicht dokumentiert?

Keine große Sache, ich habe bereits die Details der Schnittstellen gelesen, es zeigt alle benötigten Methoden/Konstruktoren/Rückgabetypen, und jetzt weiß ich, wie man diese "Klassen" verwendet.

+0

Mögliche Duplikate von [Was ist eine Schnittstelle in Java?] (Http://stackoverflow.com/questions/1321122/what-is-antinterface-in-java) – Winter

+0

Java EE ist nur eine Spezifikation; Es hat keine Implementierung. Dritte müssen die Spezifikation implementieren. In der Regel sollte Ihr Code nur von der Java EE-Spezifikation abhängig sein. Sie stellen dann zur Laufzeit eine Implementierung auf dem Klassenpfad bereit. Javax.json ist Teil (oder wird Teil von Java EE sein). – sturcotte06

+0

"... der Typ einer Variablen kann keine Schnittstelle sein." Das ist völlig falsch. Ich verspreche dir 'List names = new ArrayList <>();' ist gültig. Tatsächlich ist 'Serializable names = new ArrayList ();' gültig. – VGR

Antwort

1

Java EE ist eine Spezifikation; Es hat keine Implementierung. Es beruht auf der Implementierung der Spezifikation durch Dritte. javax.json Paket ist Teil (oder wird schließlich ein Teil sein) Java EE. Daher enthält die Aufnahme dieses Jars nur die Schnittstelle zu einer JSON API. Sie müssen eine Implementierung zur Laufzeit bereitstellen, damit sie funktioniert. Normalerweise sollte Ihr Code unabhängig von der Implementierung sein, auch wenn dies in der Tat leichter gesagt als getan ist.

2

Die Dokumentation, die Sie lesen, handelt von der API, wie in der Spezifikation JSR 353 definiert. Verschiedene Projekte können eine Implementierung für die API bereitstellen. Beispiel: this page verweist auf die Referenzimplementierung.

Andere Projekte wie genson bieten ihre eigene Implementierung des Standards.

1

Warum javax.json nur Schnittstellen enthält?

Denn absichtlich wollen die Implementierer die Details der Umsetzung verstecken und ermöglicht es Ihnen, Instanzen obwohl Factory-Methoden nur erstellen

(wie sie von new zu instanziieren gegen) Also, wo ist die Klasse JsonArray ? ... aber warum ist das nicht dokumentiert?

Irgendwo gut versteckt in einem privaten Paket, wahrscheinlich beginnend mit com.sun. Selbst wenn Sie es finden, wäre es sehr unklug, es direkt zu verwenden, da sie die Implementierung im nächsten jdk-Sicherheitsupdate möglicherweise ändern und jeglichen Code, der auf undokumentierten Funktionen beruht, durchbrechen.

Verwandte Themen