Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Cast

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);
2 respostas

Desculpe, como assim redundante?

solução!

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.