2017-07-20 1 views
2

Nur fyi, das ist meine erste Frage auf StackOverflow und ich bin wirklich neu in Kotlin.Identität Gleichheit für Argumente der Typen Int und Int ist veraltet

Während an einem Projekt arbeiten, die vollständig Kotlin (ver 1.1.3-2) ist, sehe ich eine Warnung auf dem folgenden Code (mit den Kommentaren für Sie neugierig Burschen):

// Code below is to handle presses of Volume up or Volume down. 
    // Without this, after pressing volume buttons, the navigation bar will 
    // show up and won't hide 
    val decorView = window.decorView 
    decorView 
     .setOnSystemUiVisibilityChangeListener { visibility -> 
      if (visibility and View.SYSTEM_UI_FLAG_FULLSCREEN === 0) { 
       decorView.systemUiVisibility = flags 
      } 
     } 

Die Warnung ist für Sichtbarkeit und View.SYSTEM_UI_FLAG_FULLSCREEN === 0, und es heißt Identität Gleichheit für Argumente der Typen Int und Int ist veraltet.

Wie sollte ich den Code ändern und warum wurde er an erster Stelle veraltet (aus Wissenswunsch)?

+0

für primitive Typen, '' === (Referenz Gleichheit) ist das gleiche wie ' == '(' Gleichheit '). Der Compiler wird die Referenzgleichheit für beide Primitivtypen verwenden, also verwendet der idiomatische Kotlin '==' für primitive Typen. –

+0

@EricCochran Danke! Das macht es sehr einfach. – Aba

Antwort

2

können Sie den Code ändern, indem structual equality statt wie unten:

//    use structual equality instead ---v 
if (visibility and View.SYSTEM_UI_FLAG_FULLSCREEN == 0) { 
    decorView.systemUiVisibility = flags 
} 

Warum schlagen nicht referential equality zu benutzen? Sie können meine Antwort here sehen.

Auf der anderen Seite, wenn Sie referential/identity equality verwenden vielleicht false zurückkehren, zum Beispiel:

val ranged = arrayListOf(127, 127) 

println(ranged[0] === ranged[1]) // true 
println(ranged[0] == ranged[1]) // true 

val exclusive = arrayListOf(128, 128) 

//          v--- print `false` here 
println(exclusive[0] === exclusive[1]) // false 
println(exclusive[0] == exclusive[1]) // true 
+0

Danke für die Erklärung! Kurz gesagt, der Grund, warum wir in diesem Fall keine referenzielle Gleichheit verwenden sollten, ist, dass sie möglicherweise nicht das Ergebnis liefert, das wir erwarten (falsch, wenn es tatsächlich wahr ist)? – Aba

+0

@Aba ja. du hast es schon verstanden "** warum **", Prost. –

+0

Kühl. Ich muss viel mehr lesen und üben. Schätze deine Hilfe. :) – Aba

Verwandte Themen