Ich bin neu in Kotlin und versuche zu verstehen, wann "=" und wann ":" verwendet werden soll. Das klingt für mich etwas verwirrend.

Hier sind die wenigen Dinge, die zu meiner Verwirrung führen:

button.setOnClickListener(object : OnClickListener{
    override fun onClick(view: View){
    doSomething() }
})    

Hier ist "Objekt" eine Variable, die eine OnClickListener -Instanz enthält, wenn ich mich nicht irre.

Nach dem obigen Beispiel

class Car(val make:String ,var  model : String){

fun start(noise : String = "Wroom Wroom"){
    println(noise)
 }
}
fun main(args: Array<String>) {

val carOne = Car("Toyota","Avalon")
var car2:Car("Telsa","S")
car3:Car("Benz","C")

}

Beim Start der Funktion ist noise : String = "Wroom Wroom " gültig, carOne ist gültig, aber car2 und car3 sind ungültig, was dem Muster der Variablen "noise" folgt!

Kann mir bitte jemand erklären, wo ich falsch liege. Danke im Voraus.

0
Sumukha Aithal K 18 Jän. 2019 im 09:19

3 Antworten

Beste Antwort

Sie verwechseln Objektausdrücke und Deklarationen mit regulären Variablendeklarationen mit Standardwerten.

: bezieht sich auf den Typ eines Objekts oder auf den Supertyp. Im Fall des Schlüsselworts object können Sie jedoch eine anonyme Klasse erstellen, die von einem bestimmten Typ erbt. Dies ähnelt der anderen Vererbungssyntax in Kotlin, ist jedoch spezifischer. Weitere Informationen finden Sie unter hier.

= legt in diesem Fall nur einen Standardwert für eine Variable fest. Beachten Sie, dass Sie in Ihrem Beispiel nicht = in einem Funktionsaufruf verwenden, sondern in einer Funktionsdeklaration.

2
snowe 18 Jän. 2019 im 06:35

"=" Zuweisungsoperator - Hiermit werden Standardwerte für Parameter angegeben.


":" Doppelpunkt: Trennt einen Namen von einem Typ in Deklarationen


1
Aftab22 18 Jän. 2019 im 06:31

= dient zur Zuordnung: zur Definition des Typs

Wenn Sie es jedoch als Parameter in einer Funktion verwenden

fun foo(noise : String = "Wroom Wroom ")

Rauschen ist Ihre Variable

String ist Ihr Typ (definiert durch : )

= "Wroom Wroom" ist der Standardwert

1
Rajat Beck 18 Jän. 2019 im 06:35