Scala: öffentliches statisches Finale in einer Klasse

8

Ich versuche, ein echtes Äquivalent für Javas public static final in Scala zu erhalten, um TwiP zu verwenden.

>

Das Erstellen eines val in einem object funktioniert nicht für mich, weil es Teil einer neu generierten Klasse Example$.class ist und TwiP kann nicht von der Klasse Example.class darauf zugreifen.

Hier ist ein Beispiel für eine Java-Klasse, die ich nach Scala portieren möchte:

%Vor%

Aber ich weiß nicht, wie ich die public static final nach Scala portieren soll. Wenn es ein Wert in einem Objekt wie hier ist

%Vor%

Ich bekomme nur die folgende Ausnahme:

%Vor%

Wie kann ich das Problem mit Scala lösen?

    
renfis 27.10.2009, 16:41
quelle

4 Antworten

10
%Vor%

Die val -Definition im Companion-Objekt erstellt Ihre public static final -Variable und die import -Deklaration bietet einen schönen einfachen Alias ​​im Code, mit dem Sie die Klasse schreiben.

Beachten Sie, dass die Variable public static final in Scala immer noch so kompiliert wird, dass sie wie ein Aufruf einer statischen Methode aussieht, wenn Sie diesen Code von Java aufrufen.

Bearbeiten: Ich bin ein bisschen falsch wegen eines Fehlers in Scala 2.7, den ich ausführlich in einer anderen Antwort demonstriere.

    
Ken Bloom 28.10.2009 03:06
quelle
3

Der folgende Scala-Code:

%Vor%

Erzeugt die folgenden Java-Klassen:

%Vor%

Der folgende Scala-Code:

%Vor%

Erzeugt die folgenden Java-Klassen:

%Vor%

Die Tatsache, dass statische Member nicht in der Klasse definiert sind, wenn das Objekt denselben Namen wie die Klasse hat, ist Scala Bug # 1735 und in Scala 2.8 Snapshots behoben.

Es sieht also so aus, als ob TwiP überhaupt nicht funktioniert, wenn Sie nicht entweder Scala upgraden oder einen Weg finden, TwiP mit nicht-statischen Parametergenerierungsmethoden zu arbeiten.

    
Ken Bloom 30.10.2009 20:22
quelle
2

Sie müssen die Variable nur als "val" in einem Begleitobjekt definieren.

%Vor%

HINWEIS: endgültige statische Variablen in scala folgen nicht der gleichen Konvention wie in Java. Schau dir an: Ссылка

    
Marcos Rios 18.06.2017 21:19
quelle
1

Wenn Sie eine Variable verwenden, können Sie einen eigenen Getter und Setter erstellen, und wenn der Wert bereits festgelegt ist, ändern Sie ihn nicht.

Das ist vielleicht nicht der beste Ansatz, aber es wäre hilfreich, wenn Sie erklären könnten, warum Sie public static final für eine Variable verwenden möchten, da eine bessere Lösung dann offensichtlich ist.

    
James Black 27.10.2009 16:45
quelle

Tags und Links