我写了一个方法来在Android中通过id获取视图,如下所示: 例如。
Button button = <Button>find(R.id.someId);
实际上不需要&lt;按钮取代。 这是我写的方法:
protected <T extends View> T find(int id){
return (T) findViewById(id);
}
效果很好,但警告“Unchecked cast”让我感到困扰。我怎么能摆脱它? 这种方法可以保存吗? 我受到了Kotlin的启发,我想创建这个漂亮的小方法来使代码更漂亮。
答案 0 :(得分:1)
您可以尝试使用@SuppressWarnings("unchecked")
,它是一个注释,用于禁止有关未经检查的泛型操作(非异常)的编译警告,例如强制转换
根据它的Javadocs,它可以用于局部变量;这样,它甚至不会影响整个方法。
答案 1 :(得分:1)
警告就在那里,因为您不知道View是否真的是类型T,这会混淆正常的Android检查。
为什么不做你的
protected View find(int id){
return findViewById(id);
}
然后
Button button = (Button)find(R.id.someId);
避免方法中的强制转换并使用泛型。
这同样短,不会导致此警告。
答案 2 :(得分:1)
根据这个答案,我提出了我想要的东西: 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));
}
它允许我检索这样的视图:
Button button = find(R.id.someButton, Button.class);
我觉得很好。 感谢@Lev指出JakeWharton/butterknife,我从现在开始肯定会使用它。