web-dev-qa-db-ja.com

Int型およびInt型の引数の同一性は非推奨です

正直、これはStackOverflowに関する私の最初の質問であり、私はKotlinで本当に新しいです。

完全にKotlin(バージョン1.1.3-2)であるプロジェクトで作業しているときに、次のコードに関する警告が表示されます(好奇心旺盛な若者向けのコメント付き)。

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

警告はvisibility and View.SYSTEM_UI_FLAG_FULLSCREEN ===に対するものであり、タイプIntおよびIntの引数のIDの等価性は非推奨ですと表示されます。

コードをどのように変更する必要がありますか。なぜそれが最初から廃止されたのですか(知識のため)。

18
Aba

以下のように、代わりに structual equality を使用してコードを変更できます。

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

referential equality の使用を推奨しないのはなぜですか?あなたは私の答えを見ることができます ここ

一方、 referential/identity equality を使用すると、falseが返される可能性があります。次に例を示します。

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