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.