web-dev-qa-db-fra.com

L'égalité d'identité pour les arguments de types Int et Int est déconseillée

Juste pour info, c'est ma première question sur StackOverflow et je suis vraiment nouveau dans Kotlin.

En travaillant sur un projet entièrement Kotlin (ver 1.1.3-2), je vois un avertissement sur le code suivant (avec les commentaires pour vous les gars curieux):

    // 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
            }
        }

L'avertissement est pour visibilité et View.SYSTEM_UI_FLAG_FULLSCREEN ===, et il dit l'égalité d'identité pour les arguments de types Int et Int est déconseillée.

Comment devrais-je changer le code et pourquoi a-t-il été déprécié en premier lieu (pour la connaissance)?

18
Aba

Vous pouvez changer le code en utilisant égalité structurelle à la place comme ci-dessous:

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

Pourquoi ne pas suggérer d'utiliser égalité référentielle ? vous pouvez voir ma réponse ici .

En revanche, lorsque vous utilisez égalité référentielle/identité peut renvoyer false, par exemple:

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
19
holi-java