最近写代码发现控件初始化的时候不需要类型强转了,强转后会出现Casting 'findViewById(R.id.XXX)' to 'XXX' is redundant
的提示,如图所示:
代码如下:
private void initViews() {
mUserNameEt = (EditText) findViewById(R.id.et_username); //redundant
mPasswordEt = findViewById(R.id.et_password);
mLoginBtn = findViewById(R.id.btn_login);
}
查看 findViewById(int id)
方法的源代码:
public <T extends View> T findViewById(int id) {
throw new RuntimeException("Stub!");
}
可以看到,T extends View
声明了 findViewById(int id)
是个泛型方法,同时 extends View
限制了返回的 T
类型必须是 View
的子类,因此不用向下强转。
而以前需要强转的findViewById(int id)
方法的源码如下:
public View findViewById(int id) {
throw new RuntimeException("Stub!");
}
显然,findViewById
直接返回了 View
,因此控件初始化时必须向下强转。