Segurei até onde eu pude. Tentei, tentei e vou enviar a lista "faltando".

Não consigo entender mesmo essa letra e). Não consegui usar nenhum dos
métodos propostos aqui e não consegui entender as "mensagens novas" (não
comentadas em sala) aos objetos. Peço perdão, mas esforço não faltou.

Abraço.



Em 26 de abril de 2010 12:45, Miguel Jonathan <[email protected]>escreveu:

> O método equals() é usado em classes em que é possível haver dois objetos
> distintos (ou seja, duas instâncias em locais diferentes da memória) mas que
> devem ser considerados iguais para fins da aplicação,
>
> Caso típico são as strings. Se eu tenho duas strings criadas assim:
> String nomeUniversidade = new String("UFRJ");
> String minhaUniversidade = new String("UFRJ");
>
> haverá dois objetos distintos, em endereços diferentes.
> Mas para todos os efeitos, gostaríamos de considerar as duas strings como
> iguais, por exemplo, se quisermos saber se minhaUniversidade é igual a
> nomeUniversidade, a resposta deveria ser true.
>
> Mas se usarmos o comparador ==, a resposta será false, pois são objetos
> diferentes:
> minhaUniversidade == nomeUniversidade dá false.
> Aí entra o método equals, onde minhaUniversidade.equals(nomeUniversidade)
> retorna true!
>
> No caso específico dos enums, isso nunca ocorre, porque cada instância é
> única, por isso não há necessidade de haver método equals com enums.
>
> Jonathan
>
> 2010/4/26 Peter P. Lupo <[email protected]>
>
> Eu vou partir da sua conclusão para explicar o que está havendo:
>>
>> "Enfim, me alonguei muito mais do que pretendia, mas fica o aviso ai pra
>> quem for usar o ".equals"... tem que usar "toString" se não não funciona
>> !!!"
>>
>> E vou fazer um acréscimo para ficar correto:
>>
>> pra quem for usar o ".equals"... tem que usar "toString" se não não
>> funciona *ao comparar com outra String* !!!
>>
>> Sim, pois BOY é uma instância da classe Cargo e nome é uma instância da
>> classe String. A comparação de Cargo com String tem que dar false assim como
>> cadeira.equals(mesa) tem que dar false! ;-)
>>
>> Isso não significa que sempre que vc for usar o equals você tem que usar o
>> toString junto. Na verdade o ideal é não fazer isto e deixar que uma
>> instância saiba se comparar (através de informações como sua classe,
>> subclasse e valores de seus atributos) a instâncias de outras classes.
>>
>> Imagina se vc muda o toString de Cadeira para retornar a String "Sou uma
>> mobília" e faz o mesmo com Mesa.
>>
>> Se você fizer cadeira.equals(mesa) retornaria true quando deveria retornar
>> false.
>>
>> Então o ideal é não usar o toString na comparação a menos que o que vc
>> queira saber é realmente se uma determinada instância retorna um valor
>> específico no toString, que é o caso do exercício da lista.
>>
>> Respondendo suas outras observações:
>>
>> (...)
>>  Bom, será mesmo que esse Cargo.BOY retorna uma String ?!", testei e vi
>> que era verdade.
>> (...)
>> Ai eu fui por partes, coloquei na classe SimulaFolha isto
>> "System.out.println(Cargo.BOY), e no consolhe aparecia certinho a palavra
>> "BOY".
>> (...)
>>
>> Isto não significa que Cargo.BOY retorna String. De fato, NÃO retorna!
>> Cargo.BOY é uma referência para uma instância do tipo Cargo.
>> O que acontece é que existe um método println que recebe objetos e chama o
>> .toString() internamente ao imprimir na console.
>> O resultado da chamada que vc fez é o equivalente a
>> System.out.println(Cargo.BOY.toString());
>>
>> Este é um comportamento bastante comum na API. Ao se precisar representar
>> um objeto de uma forma inteligível, o toString é comumente chamado. O mesmo
>> acontece se você tentar concatenar um objeto com uma string:
>>
>> "Este objeto é um " + Cargo.BOY;
>>
>> O toString de BOY é chamado "automagicamente" pelo compilador, sendo esta
>> chamada equivalente a
>>
>> "Este objeto é um " + Cargo.BOY.toString();
>>
>>
>> E realmente este parece ter sido o método em que o pessoal teve mais
>> dificuldade mas até agora não vi ninguém com ESTA dificuldade. :-P
>>
>>
>> Abraço
>>
>> Peter P. Lupo
>> http://craftnicely.blogspot.com - http://sites.google.com/site/pplupo
>> MPS.BR Authorized Implementation Practitioner - Certified ScrumMaster
>> Sun Certified Java Associate - Java Brown Belt
>> +55 (021) 81742487
>>
>>
>> 2010/4/26 Thiago Carvalho <[email protected]>
>>
>> Pelo visto o método "public static Cargo obtem(String nome" é de longa a
>>> parte mais difícil da lista. Eu gostaria apenas de fazer um comentário sobre
>>> como o ".equals" pode ser altamente traiçoeiro. Como o professor pediu, eu
>>> não vou colocar meu código aqui exatamente pelos motivos que ele mencionou,
>>> MAS dentro do método obtem, eu criei um vetor dos 4 tipos de cargo e usei o
>>> ".equals" para comparar esses vetores, um a um, com a String nome do
>>> argumento, caso ele não encontrasse nenhum dos 4, ele retornava null. O
>>> compilador não reclamou, mas pra qualquer coisa que eu digitasse na String
>>> nome, inclusive "boy", "motorista" ou os outros 2, ele retornava null. Ai eu
>>> fui por partes, coloquei na classe SimulaFolha isto
>>> "System.out.println(Cargo.BOY), e no consolhe aparecia certinho a palavra
>>> "BOY".Bom, depois de umas 3 horas fazendo mil testes e modificações (fui
>>> filtrando varias partes do codigo pra tentar achar o erro), eu acabei
>>> descobrindo que se você pedir pra ele imprimir Cargo.BOY, ele imprime a
>>> String "BOY" usando o metódo toString (que ja está automaticamente declarado
>>> pelo fato de ser enum, e sempre é igual ao nome do enum), mas quando você
>>> usa "Cargo.BOY.equals(nome)" (nome é a String declarada no inicio do método
>>> obtem) ele compara o OBJETO BOY com a String nome e nunca retorna verdadeiro
>>> ! Eu sinceramente achei isso muito "cilada", porque quando todos os cargos
>>> retornavam null, a primeira coisa que eu pensei foi "Bom, será mesmo que
>>> esse Cargo.BOY retorna uma String ?!", testei e vi que era verdade. Depois
>>> fiquei rodando em várias outras partes do código, tentando mil coisas, pra
>>> no final descobrir que era só colocar "Cargo.BOY.toString().equals(nome)"
>>> que tudo ia funcionar. Na minha cabeça, como o ".equals" é um método da
>>> classe String, quando eu pedisse para comparar Cargo.BOY com alguma coisa,
>>> ele automaticamente ia usar o método toString do objeto BOY e retornar uma
>>> String e não o objeto inteiro.
>>>
>>> Enfim, me alonguei muito mais do que pretendia, mas fica o aviso ai pra
>>> quem for usar o ".equals"... tem que usar "toString" se não não funciona !!!
>>>
>>> --
>>> You received this message because you are subscribed to the Google Groups
>>> "Comp 2 - Geral" group.
>>> To post to this group, send email to [email protected].
>>> To unsubscribe from this group, send email to
>>> [email protected]<comp2-geral%[email protected]>
>>> .
>>> For more options, visit this group at
>>> http://groups.google.com/group/comp2-geral?hl=en.
>>>
>>
>>  --
>> You received this message because you are subscribed to the Google Groups
>> "Comp 2 - Geral" group.
>> To post to this group, send email to [email protected].
>> To unsubscribe from this group, send email to
>> [email protected]<comp2-geral%[email protected]>
>> .
>> For more options, visit this group at
>> http://groups.google.com/group/comp2-geral?hl=en.
>>
>
>  --
> You received this message because you are subscribed to the Google Groups
> "Comp 2 - Geral" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected]<comp2-geral%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/comp2-geral?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups "Comp 
2 - Geral" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/comp2-geral?hl=en.

Responder a