2017-07-20 15 views
2

これはStackOverflowに関する私の最初の質問です。私はKotlinで本当に新しいです。Int型とInt型の引数の同一性は非推奨です

完全に(1.1.3-2版)Kotlinのプロジェクトに取り組んでいる間、私は(あなたの好奇心若い衆のコメント付き)次のコードに警告を参照してください。

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

警告がためのものですの可視性とView.SYSTEM_UI_FLAG_FULLSCREEN === 0と書かれています。Int型とInt型の引数の同一性は、になります。

コードをどのように変更すればよいのですが、最初に(なぜなら)非推奨となったのはなぜですか?

+0

は、 '==='(参照の等価は) 'と同じです== '(' equals'等号)コンパイラは、両方ともプリミティブ型の参照等価を使用するので、イディオム的なKotlinはプリミティブ型に '=='を使用します。 –

+0

@EricCochranありがとう!それは非常に簡単です。 – Aba

答えて

2

あなたは代わりに以下のようにstructual equalityを使用して、コードを変更することができます。

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

なぜreferential equalityを使用することを示唆していませんか?私の答えはhereです。一方

、あなたが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 
+0

説明をありがとう!要するに、このケースで参照平等を使用すべきではない理由は、それが期待した結果(実際には真である場合)をもたらさない可能性があるからです。 – Aba

+0

@Abaはい。あなたはすでにそれを理解しています "**なぜ**"、歓声。 –

+0

クール。私はもっ​​と多くのことを読んで練習する必要があります。あなたの助けに感謝。 :) – Aba

関連する問題