Boa tarde, por que nas novas versões do Android esse cast do código abaixo passou a ser redundante?
EditText campoSite = (EditText) activity.findViewById(R.id.formulario_site);
Boa tarde, por que nas novas versões do Android esse cast do código abaixo passou a ser redundante?
EditText campoSite = (EditText) activity.findViewById(R.id.formulario_site);
Desculpe, como assim redundante?
Porque agora o findViewById permite a inferência de tipo numa atribuição, isso é possível quando se usa tipos genéricos.
Antes, o findViewById tinha a seguinte assinatura:
public View findViewById(int id) {
//...
}Agora, com generics ficou assim:
public <T> T findViewById(int id) {
View view = //a view encontrada...
return (T) view;Então, esse código:
EditText campoSite = (EditText) activity.findViewById(R.id.formulario_site);Atualmente, pode ser reescrito assim:
EditText campoSite = activity.<EditText>findViewById(R.id.formulario_site);Mas, ao escrever <T>, foi dito que o compilador pode inferir o tipo de T. Logo, podemos escrever assim:
EditText campoSite = activity.findViewById(R.id.formulario_site);Como o retorno do método é atribuído a uma variável do tipo EditText, o compilador chuta (infere) que o tipo do retorno deve ser também um EditText.
Por isso atualmente o casting é desnecessário.