Ich werte derzeit Scala für zukünftige Projekte aus und bin auf etwas Seltsames gestoßen. Ich habe die folgende Konstante für uns in einer JSP erstellt:
%Vor%Und es hat nicht funktioniert. Nach einigem Experimentieren entschied ich mich zu dekompilieren, um auf den Grund zu kommen:
%Vor%Das ist interessant! Persönlich frage ich mich seit einiger Zeit, warum ein Inspektor das Präfix get und ein Mutator das Präfix set in Java benötigt, wenn sie in verschiedenen Namensräumen leben.
>Es könnte jedoch immer noch peinlich sein, dies dem Rest des Teams zu erklären. Ist es also möglich, eine öffentliche Konstante ohne den Inspektor zu haben?
Dies liegt an dem Prinzip des einheitlichen Zugriffs , dh: Methoden und Felder sind nicht unterscheidbar
Siehe diese Antwort
In Scala 2.8.0 bedeutet das, wenn Sie haben ein Begleitobjekt, du verlierst dein statische Weiterleitungen)
Wenn Sie dies in Scala haben:
%Vor%Sie können es so von Java
verwenden %Vor%Siehe auch das Buch Scala in Depth
Beachten Sie auch die @ scala.reflect.BeanProperty für Klassen.
Ich hatte einen weiteren Blick auf den dekompilierten Code und notierte etwas anderes. Die Variablen sind nicht wirklich statisch. Meine nächste Idee war stattdessen, ein Objekt zu verwenden:
%Vor%Aber jetzt werden die Dinge wirklich hässlich:
%Vor%Ich bekomme also eine zusätzliche Klasse, die auf $ endet und eine Singleton-Instanz namens MOUDLE $ hat. Und da ist noch der Inspektor. So wird der Zugriff auf die Variable innerhalb eines JSP:
%Vor%Das funktioniert wie erwartet und ich persönlich kann damit leben, aber wie soll ich das dem Team erklären?
Natürlich, wenn es einen einfacheren Weg gibt, höre ich gerne davon.
Tags und Links scala java scala-java-interop