最近寫代碼發現控件初始化的時候不需要類型強轉了,強轉後會出現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
,因此控件初始化時必須向下強轉。