Playframework: [2.4.x] Json.format gibt OFormat zurück, aber API sagt Format

Erstellt am 2. März 2017  ·  4Kommentare  ·  Quelle: playframework/playframework

Spielversion (2.5.x / etc)

2.4.3

API (Scala / Java / Weder / Beide)

Scala

Erwartetes Verhalten

Bitte beschreiben Sie das erwartete Verhalten des Problems ab der ersten Aktion.

  1. Laut Dokumentation gibt Json.format [Foo] Format [Foo] zurück.

Tatsächliches Verhalten

  1. val oFormat: OFormat [Foo] = Json.format [Foo] wird kompiliert
help wanted

Alle 4 Kommentare

Hier gibt es wirklich keinen Widerspruch. Json.format[Foo] gibt OFormat[Foo] , was ein Subtyp von Format[Foo] . Welcher Teil der Dokumentation ist Ihrer Meinung nach falsch?

Normalerweise verwenden Sie beim Deklarieren von Typen die allgemeinste Schnittstelle ( Format ) anstelle eines spezifischeren Implementierungstyps ( OFormat ). Wenn Sie jedoch zusätzliche Manipulationen wie das Hinzufügen von Feldern zum Objekt vornehmen müssen Es ist nützlich, ein OFormat , das garantiert als JsObject .

@gmethvin Ich stimme Ihren allgemeinen Kommentaren zu, dass Sie beim Deklarieren von Typen eher die Schnittstelle als den Implementierungstyp verwenden würden. In diesem Fall ist OFormat jedoch nicht der Implementierungstyp, sondern eine spezifischere Schnittstelle. Da Json.format[Foo] eine anonyme Implementierung der Schnittstelle OFormat zurückgibt, würde ich erwarten, dass die Dokumentation OFormat anstelle von Format zurückgibt.

Ich habe auch festgestellt, dass die Dokumentation in Play 2.5 aktualisiert wurde, um zu zeigen, dass sie OFormat anstelle von Format zurückgibt (https://www.playframework.com/documentation/2.5.x/api) /scala/index.html#play.api.libs.json.Json$). Daher halte ich es für sinnvoll, wenn die Dokumentation für Play 2.4 (und möglicherweise früher) entsprechend aktualisiert wird.

Okay, das Problem ist also nicht die Dokumentation. Das Makro wird so eingegeben, dass Format , nicht OFormat : https://github.com/playframework/playframework/blob/2.4.x/framework/src/play-json/src/main /scala/play/api/libs/json/JsMacroImpl.scala#L18h. Da der Code jedoch tatsächlich OFormat zurückgibt und keine Typanmerkungen vorhanden sind, wird OFormat Ihrem Code ausgesetzt.

Die Änderung zu OFormat erfolgte in # 4772. Da es sich um eine abwärtskompatible Änderung handelt, sollte es ziemlich einfach sein, auf 2.4.x zurück zu portieren.

Ich habe diese PR als "Community" markiert, da dies eine experimentelle Funktion in einer älteren Version ist. Daher hat dies für uns keine Priorität, aber es wäre eine gute Aufgabe für ein Community-Mitglied, sich damit zu befassen.

2.4.x ist EOL

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen