Ich bin in der offiziellen Referenz über den Augji Reali-Konstruktor (this () oder .this) herumgewandert, aber anstatt ihn nicht zu finden, gab es einen Artikel über den Konstruktor als sekundäre Information, sodass der Inhalt ungefähr in der Literatur enthalten ist. Es ist eine Übersetzung.
Der Konstruktor wird verwendet, um den Status des Objekts zu initialisieren. Wie Methoden enthält auch ein Konstruktor eine Reihe von Anweisungen, die beim Erstellen eines Objekts ausgeführt werden.
Scala unterstützt zwei Arten von Konstruktoren.
Wenn ein Programm nur einen Konstruktor enthält, wird es als primärer Konstruktor bezeichnet. Der primäre Konstruktor und die Klasse teilen sich denselben Körper, sodass der Programmierer die Erstellung des Konstruktors nicht explizit deklarieren muss.
class Hello(name) {
// Statements
}
//Primärkonstruktor erstellen
class Monster(name: String, attribute: String, attack: Int, defense: Int) {
def status: String = {
s"""
|Name: $name
|Attribute: $attribute
|Attack: $attack
|Defense: $defense
|""".stripMargin
}
}
object Main {
def main(args: Array[String]): Unit = {
//Objekterstellung und -initialisierung
val dmg = new Monster("Dark Magician Girl", "Dark", 2000, 1700)
println(dmg.status)
}
}
Name: Dark Magician Girl
Attribute: Dark
Attack: 2000
Defense: 1700
//Primärkonstruktor erstellen
class Nap {
def zzz: String = {
"Zzz.."
}
}
object Main {
def main(args: Array[String]): Unit = {
//Objekterstellung und -initialisierung
val nobita = new Nap
println(nobita.nap)
}
}
Zzz..
var
können Sie den Wert eines Feldes ändern und eine Getter- und Setter-Methode für das Feld generieren.val
deklarieren, können Sie den Wert des Feldes nicht ändern. Im Feld werden nur Getter-Methoden generiert.private
zwischen dem Klassennamen und dem Parameter verwenden.//Mit Parametern
class Secret private (n: Int) {
// Statements
}
//Keine Parameter
class Privacy private {
// Statements
}
class User(val name: String = "Anonymous") {
def show: String = s"Name: $name"
}
object Main {
def main(args: Array[String]) = {
val usr = new User
println(usr.show)
}
}
Andere Konstruktoren als der primäre Konstruktor werden als erweiterte Konstruktoren bezeichnet, und Sie können beliebig viele erstellen. Das Programm hat jedoch nur einen primären Konstruktor.
class Apple(product: String, model: String) {
var color: String = ""
def details: String = {
s"""
|Product name: $product
|Model: $model
|Color: $color
|""".stripMargin
}
//Augji Reali Konstruktor
def this(name: String, model: String, color: String) = {
//Starten Sie den primären Konstruktor
this(name: String, model: String)
this.color = color
}
}
object Main {
def main(args: Array[String]): Unit = {
val device: Apple = new Apple("iPhone", "iPhone 11 Pro", "Gold")
println(device.details)
}
}
Product name: iPhone
Model: iPhone 11 Pro
Color: Gold