Android:创建较短版本的findViewById – 未经检查的转换

我写了一个方法来获取Android中的id这样的意见:例如

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

实际上不需要<Button>。 这是我写的方法:

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

它工作的很好,但警告“未经检查的演员”困扰我。 我怎么能摆脱它? 这种方法保存吗? 我非常受Kotlin的启发,我想创建这个漂亮的小方法来使代码更漂亮。

您可以尝试使用@SuppressWarnings("unchecked") ,这是一个注释,可以禁止有关未经检查的泛型操作(不是例外)的编译警告,例如强制转换

根据其Javadocs ,它可以继续使用局部变量; 这样,它甚至不影响整个方法。

警告在那里,因为你不知道该视图是否真的是T型的混淆正常的Android检查。

你为什么不干脆干呢

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

接着

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

避免在方法中使用泛型。

这同样短,不会导致这个警告。

基于这个答案,我想出了我正在寻找什么: 如何使方法返回类型通用?

 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指出杰克·沃顿/ butterknife ,我从现在开始肯定会使用它。