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

Dúvida no Ex. 2 da Aula 5 - Persistência com SQLite

Bom dia.

A instrução "aluno.setNota((double) nota);" teria o mesmo efeito que "aluno.setNota(Double.valueOf(nota));" ?

Aguardo retorno.

Obrigado.

3 respostas

Julius,

Fazer:

aluno.setNota((double) nota);

Fazer isso, se chama Cast e não funcionaria neste caso. Trazendo essa ideia pra vida real, seria equivalente a tentar calçar um tênis menor do que o seu pé. Você tem um pé que recebe um tênis, mas ele não tem o tamanho suficiente.

A nota do aluno espera receber um double e você está passando uma String. O compilador, se fosse uma pessoa reclamaria mais ou menos assim "Pô cara, está visível que isso não é um double. Não vou deixar você atribuir isso aqui não.".

Isso é diferente de quando usamos o método findViewById() na Activity, porque o retorno do findViewById() é para uma View e você usa o Cast para umButton```. O compilador sabe que o Button é uma View e deixa você fazer isso. Seria algo como você usar um chinelo na faculdade, seus colegas podem até reclamar mas ele cabe no seu pé e ele é um calçado, assim como o tênis.

Fazer cast é dizer para o programa que você tem certeza que aquele valor cabe em uma variável, mas os tipos tem q ser equivalentes.

double b;
int a = 1;
b = (double) a;

O exemplo acima funcionaria, porque um int cabe em um double.

Espero ter ajudado. Abraço!

Blz João. Obrigado.

solução!

Marquei este post como solucionado antes de analisar melhor a resposta.

João, entendo que o atributo nota não foi passado como uma String.

Em Aluno(), "nota" foi criado como Double e não como String.

E após o findViewById foi tratado como atributo do tipo int.

Entendo que é possível fazer o cast.

Testando no código, tanto "aluno.setNota((double) nota)" como "aluno.setNota(Double.valueOf(nota))" funcionou.

Valeu.