Wie wird eine Konstruktorvariable (sic!) als schreibgeschützt verfügbar gemacht?

8

Ich habe diese ziemlich einfache Frage über Scala. Vorausgesetzt, ich muss der Klassendefinition folgen:

%Vor%

Der Code, der eine Instanz von Foo erstellen kann, muss den Anfangswert für bar übergeben können. Aber wenn ich bar als var definiere, kann der Benutzer auch seinen Wert zur Laufzeit ändern, was ich nicht will. Der Benutzer sollte nur bar lesen können. bar selbst wird intern modifiziert, so dass val keine Option ist.

    
Malax 07.01.2010, 19:34
quelle

1 Antwort

13

Schreibgeschützt für eine Eigenschaft ist einfach, erstellen Sie einfach eine Getter-Methode ohne den entsprechenden Setter. Es ist auch einfach, ein eigenes modifizierbares Feld zu erstellen.

Ihre größte Herausforderung ist der gemeinsame Namespace. Sie können denselben Namen für Folgendes verwenden:

  • der Konstruktor param
  • das interne änderbare Feld
  • der öffentliche Getter
  • der private Setter

Leider ist das nicht möglich, und Sie brauchen einen eindeutigen Namen für jede Rolle ... etwa so:

%Vor%

Wenn Sie sich nicht darum kümmern, benannte Argumente oder den Namen des Arguments in Scaladoc zu verwenden, kann dies noch weiter verkürzt werden:

%Vor%

AKTUALISIEREN

Die sauberste Methode, die Ihnen benannte Parameter zurückgibt, ist die Kombination einer Fabrik mit einer der oben genannten Techniken:

%Vor%

Dies kann dann als Bippy(42) aufgerufen werden. Genau wie der normale Konstruktor, aber ohne das new Schlüsselwort.

    
Kevin Wright 07.01.2010, 20:11
quelle

Tags und Links