Der Versuch, eine Zugriffsmethode für den Standardkonstruktorparameter zu definieren, d. h .:
%Vor%Dies führt offensichtlich zu einem Compiler-Fehler: mehrdeutiger Verweis auf überladene Definition, beide Methode Alter in der Klasse Person des Typs = & gt; Int und Wert Alter in der Klasse Person des Typs Int Übereinstimmung erwarteten Typ Int
Gibt es in diesem Kontext eine Möglichkeit, zwischen dem Namen der Membermethode und dem automatisch generierten Namen des Membernamens zu unterscheiden?
Natürlich ist es möglich, den Namen eines der beiden Bezeichner zu ändern, aber gibt es in diesem Szenario eine Möglichkeit, tatsächlich anzugeben, auf welche Bezeichner verwiesen wird?
Setzen Sie einfach "val" vor die Konstruktorparameter, die Sie als Instanzeigenschaften bereitstellen möchten.
Die obigen Antworten sind großartig für das Prinzip des einheitlichen Zugriffs. Wenn Sie Getter und Setter im Java-Stil haben oder benötigen, können Sie auch die BeanProperty Annotation verwenden.
%Vor%Dies führt dazu, dass die folgenden Methoden erstellt werden:
%Vor%Wenn Sie stattdessen die BeanProperty für einen Wert anstelle von var verwenden, wird der Setter nicht erstellt, sondern nur der Getter.
Eine andere Einschränkung, die Setter-Methode kann nicht von Scala aus aufgerufen werden. Stattdessen sollten Sie die Standard-Scala-Konvention des einheitlichen Zugriffs verwenden, um den Wert festzulegen.
Nur der Vollständigkeit halber und um die vorherigen Antworten zu erweitern, gibt es auch die Technik hier .
Zusammenfassend würde ich immer mit einem unveränderlichen Wert beginnen:
%Vor%Dann, wenn Sie herausfinden, dass Sie den Wert mutieren müssen (oder Sie wissen es im Voraus), wechseln Sie zu:
%Vor%Wenn Sie eine Validierung oder andere Berechnungen für get oder set durchführen müssen, benennen Sie Ihre Variable um und erstellen Sie Accessoren, die Ihre ursprüngliche Benennung nachahmen, ohne den Rest des Codes neu zu strukturieren:
%Vor%Natürlich können Sie entweder Setter oder Getter vereinfachen, wenn Sie dort keine Operationen benötigen.
Lob an alle anderen Antworten, die in der Tat richtig sind und viel früher kamen.
Tags und Links scala