2016-10-10 1 views
0

AndroidのIDでビューを取得する方法を次のように記述しました: Android:findViewByIdの短縮版を作成する - チェックされていないキャスト

Button button = <Button>find(R.id.someId); 

実際には、<ボタン>は必要ありません。それは素晴らしい作品が、

protected <T extends View> T find(int id){ 
    return (T) findViewById(id); 
} 

警告「未検査キャストは」私を悩ます: これは私が書いた方法があります。どうすれば私はそれを取り除くことができますか? この方法は保存されますか? 私はKotlinに非常に触発されました。コードをもっときれいにするために、この素​​敵な方法を作りたかったのです。

+4

こんにちは、きれいなコードが必要な場合は、常にJake WhartonによってButterKnifeを調べることができます。 https://github.com/JakeWharton/butterknife – Lev

+0

うわー、これはいいですね。私は間違いなくそれを使用します。 – Sermilion

答えて

1

あなたは@SuppressWarnings("unchecked")を使用しようとすることができ、未確認の一般的な操作(ない例外)に関する警告をコンパイル抑制するためのアノテーションで、そのJavadocsによると

をキャストなど、それはローカル変数に行くことができます。この方法では、メソッド全体には影響しません。

1

Viewは実際には正常なアンドロイドチェックを混乱させるタイプTであるかどうかわからないので、警告が表示されます。

は、なぜあなたは単に方法と使用ジェネリックでキャストを避けるために

protected View find(int id){ 
    return findViewById(id); 
} 

、その後

Button button = (Button)find(R.id.someId); 

をしません。

これも短く、この警告にはなりません。

+0

キャストを避けることがポイントでした。 – Sermilion

+0

あなたの方法では効果的にキャスティングを行い、全体をかなり無意味にします。しかし、私はバターナイフの使用を勧めているwhith Levに完全に同意します。 – Slamper

+0

OK、私はこれを思いついた:protected T find(int id、Class タイプ){ return type.cast(findViewById(id)); } – Sermilion

1

私は、私はこの回答をもとに探していたものを思い付いた:私は素敵だと思う

Button button = find(R.id.someButton, Button.class); 

:それが可能に How do I make the method return type generic?

protected <T extends View> T find(int id, Class<T> type){ 
    return type.cast(findViewById(id)); 
} 

私はこのようなビューを取得するために。 JakeWharton/butterknifeを指摘するための@Levのおかげで、私は今からそれを間違いなく使用します。

関連する問題