2017-10-27 13 views
2

私はAndroidが新しく、さまざまなビューを使用するための演習を行っています。そのような例の1つは、findViewByIdのキャスティング結果は冗長です

TextView messageView = (TextView) findViewById(R.id.message); 

私の質問は次のとおりです。TextViewをキャストするメリットは?私のIDEは、メソッドのキャストは冗長であると私に伝えます。このようにキャストしたいユースケースはありますか?

+0

android-studio versionはあなたが使用しています –

+0

findViewByIdはViewを返し、このクラスはすでにsetOnClickListenerメソッドを定義しているからです。これは、キャストを実行しなくても、リスナを設定できることを意味します。あなたのキャストは冗長です。 –

答えて

2

APIレベル26以前では、メソッドfindViewByIdは、Viewクラスのリファレンスを返しました。だからあなたはそれをキャストする必要があった。

//old signature 
public View findViewById(int id){ 
    // 
} 

しかし、APIレベル26から始めて、それが更新され、あなたがキャストせずに返された参照を割り当てることができるように、テンプレートを使用してViewのサブクラスを返します。

この例では、プロジェクトをビルドする際に古いAPIレベルが使用されているため、そこでキャスティングが表示されます。以前は強制的だったが、今は必要ではない。あなたは警告を受けています。

+0

ビルドツールのバージョンには拘束されていませんが、26の 'compileSdkVersion' – ianhanniballake