Ich glaube, ich verstehe die neue "Value Class" -Funktion von Scala 2.10, im Vergleich zu Haskells newtype
:
Die Frage, die ich habe, ist, wie erscheint eine Wertklasse für Java-Code, der das Scala-Paket verwendet, in dem er deklariert ist? Wird die Wertklasse als eine Referenzklasse von der Java-Seite angezeigt oder wird sie vollständig gelöscht (und erscheint daher als der Typ, der umbrochen wird)? Mit anderen Worten, wie typsicher sind Wertklassen, wenn Java auf der Quellenebene beteiligt ist?
BEARBEITEN
Der obige Code wird gemäß dem SIP-15-Dokument (in Daniels Antwort verlinkt) nicht kompiliert, da Wertklassen keine Initialisierungslogik haben dürfen, weil entweder v
explizit ein val oder% sein muss co_de% muss eine Probability
-Methode und eine entsprechende unbox
-Methode für das Companion-Objekt haben, und da Wertklassen genau ein Feld haben müssen. Der korrekte Code ist:
Die Frage selbst ist jedoch immer noch gültig.
Wertklassen werden als normale Klassen kompiliert und können als Referenzen erscheinen.
Die Magie in ihnen ist, dass , wenn die Wertklasse nicht aus dem Geltungsbereich austritt, alle Spuren davon aus dem Code gelöscht werden, wodurch der gesamte Code effektiv eingebunden wird. Und natürlich, zusätzliche Typsicherheit geben.
Siehe auch SIP-15 , das die Mechanik erklärt.
Tags und Links scala java interop scala-java-interop newtype