Tava escrevendo um programinha aqui e em um determinado momento eu pensei em salvar algumas linhas usando o switch, mas ai lembrei que ele não suporta a comparação nem com Strings nem c/ Objectos… parece que só com char, int, float etc…
só que fiquei na dúvida do pq não seria possível a utilização dele com objetos e fui pesquisar… encontrei esse link: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5012262 que parece explicar o porque… mas confesso que continuei sem entender, se alguém souber e poder dar uma palavrinha acerca disso eu agradeço… pensei até em usar como mencionado no Link, c/ hashCode, mas imaginei que o código ficaria deselegante e terminei optando pelos ifs e elses… não sei de qual modo ficaria pior :(!
Então, bom saber que 2 Strings podem ter o mesmo hashCode, terei mais cuidado com isso na próxima vez…
meu problema é que eu desenvolvi uma classe ActionListener onde eu quero que todos os botões da interface visual cheguem nessa mesma classe, no mesmo actionPeformed… no momento a única saída que encontrei foi utilizar os ifs e else mesmo, que achei que ficaram um tanto bagunçado (if (e.getSource == botaoX))… enfim. Polimorfia teria como se encaixaria nessa situação?
tem algum jeito mais elegante de fazer isso? o Visual Editor criaria uma classe para cada botão, não é bem isso que eu quero…
Eu normalmente utilizo os if aninhados, mas recorro au getActionCommand() do objeto EventList para deixar os texts e nome de objetos independentes da ação.
E faço invertido para não ter que verificar o nulo:
[quote=tiagomac]Polimorfia teria como se encaixaria nessa situação?
tem algum jeito mais elegante de fazer isso? o Visual Editor criaria uma classe para cada botão, não é bem isso que eu quero…
[/quote]
Polimorfismo é exatamente o que um programa OO (seja em uma linguagem OO como Java ou não - por isso nem todo programa Java é OO) usa no lugar de switches. O que o editor que citaste faz é exatamente o que você precisa (numa linguagem sem blocos), verifique o padrão de projeto command e o que são classes anônimas.
Vlw mesmo pessoal, bem produtiva a discussão… eu só fiquei chateado em saber q 2 strings podem ter o mesmo hashcode :(! pensei que hashcode fosse um valor individual… só por curiosidade, isso vale também para outros objetos além de Strings? 2 Objetos “Pessoa” podem ter o mesmo hash :O?
Podem, pelo princípio da contagem (o hashCode pode assumir valores de -2147483648 a +2147483647 mas você sabe que uma instância de Pessoa pode assumir muitos mais valores porque ela contém pelo menos uma String, e como você sabe, os hashCodes de strings podem se repetir).
Imagine o hashcode como um container. Cada hashcode é um container que pode conter objetos diferentes… Sets e Maps utilizam o hashcode para localizar objetos em um determinado container e usam equals para localizar um determinado objeto dentro desse determinado container. Isso ajuda agilizar a busca em grandes coleções.
Quanto menos objetos possuirem o mesmo hashcode, mais eficiente será a busca.
Se o id for único e couber em um int não tem problema nenhum.
Se ele couber em um long, também não tem problemas (acho que você não vai ter mais de 2 bilhões de entidades )