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);
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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.