| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/03/2008 20:02:46
|
Mantu
GUJ Ranger
![[Avatar]](/images/avatar/35285aa740b37f0b1933da97bf4ca4b9.jpg)
Membro desde: 27/03/2006 09:05:16
Mensagens: 961
Localização: São Paulo/SP
Offline
|
Certa vez me disseram que não é bom se ter constantes declaradas em interfaces, e a esplicação acabou ficando ao bom e velho "porque Deus quis".
Enfim: É ruim declarar constantes em interfaces? Por quê?
|
[]'s
Mantu
"Vou lançar o 'Caguei'. Caguei para o 'Cansei'". Luciano Camargo
"O povo votou contra a opinião pública". Um certo jornalão da mídia golpista, a respeito da vitória de um certo cadidato a presidente do Brasil.
 |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/03/2008 20:28:53
|
pozzo
JavaEvangelist
Membro desde: 08/04/2006 11:07:20
Mensagens: 331
Localização: Curitiba
Offline
|
http://www.javapractices.com/topic/TopicAction.do?Id=32
Achei simples e legal o trecho:
placing them in an interface promotes them to the public API of the class.
flw
This message was edited 1 time. Last update was at 27/03/2008 20:29:12
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/03/2008 21:29:39
|
Mantu
GUJ Ranger
![[Avatar]](/images/avatar/35285aa740b37f0b1933da97bf4ca4b9.jpg)
Membro desde: 27/03/2006 09:05:16
Mensagens: 961
Localização: São Paulo/SP
Offline
|
Valeu pelo texto indicado, mas ele não mostra nenhum argumento mais sólido nem a favor, nem contra.
E, no meu caso, é intencional as constantes fazerem parte da API pública.
O que me dizem?
|
[]'s
Mantu
"Vou lançar o 'Caguei'. Caguei para o 'Cansei'". Luciano Camargo
"O povo votou contra a opinião pública". Um certo jornalão da mídia golpista, a respeito da vitória de um certo cadidato a presidente do Brasil.
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/03/2008 03:45:53
|
windsofhell
GUJ Master
Membro desde: 15/06/2007 08:31:17
Mensagens: 1687
Localização: Stockholm - Sweden
Offline
|
Sim, segundo o texto, interfaces deveriam so conter somente os "servicos" que serao disponibilizados pela classe que a implementa. Uma melhor solucao seria implementar uma classe com constantes estaticas. Um exemplo que ele deu no texto eh a classe Math, que tem o Math.PI
Aqui esta o exemplo de classe de constantes
http://www.javapractices.com/topic/TopicAction.do?Id=2
Pensando bem acho que faz sentido, eu mesmo ja defini muita constante em interfaces.
//Daniel
|
Nao respondo MP!!!
Site: http://downhillracer.wordpress.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/03/2008 07:16:03
|
sergiotaborda
GUJ Expert
![[Avatar]](/images/avatar/b4a0e0fbaa9f16d8947c49f4e610b549.png)
Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline
|
Mantu wrote:Certa vez me disseram que não é bom se ter constantes declaradas em interfaces, e a esplicação acabou ficando ao bom e velho "porque Deus quis".
Enfim: É ruim declarar constantes em interfaces? Por quê?
No passado era muito utilizado. Depois alguem criou o padrão Enum (suas variantes Int Enum e String Enum)
porque colocar constantes em interfaces é ruim. Depois vieram os Enum no java 5 que constroem o padrão enum de forma intrinseca na linguagem e na jvm.
Declarar constantes em interfaces sempre foi ruim , mas houve um tempo em que não havia alternativa.
Hoje, existe alternativa , e muito melhor. Use Enum.
|
Criando sua própria API de Validação
Blog do MiddleHeaven |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/03/2008 12:38:26
|
Mantu
GUJ Ranger
![[Avatar]](/images/avatar/35285aa740b37f0b1933da97bf4ca4b9.jpg)
Membro desde: 27/03/2006 09:05:16
Mensagens: 961
Localização: São Paulo/SP
Offline
|
sergiotaborda wrote:Declarar constantes em interfaces sempre foi ruim , mas houve um tempo em que não havia alternativa.
Hoje, existe alternativa , e muito melhor. Use Enum.
Eu acabei usando Enum mesmo ontem a noite. Valeu pela dica.
Mas, agora, por que é e sempre foi ruim colocar constantes em interfaces? Há algum outro motivo além de tornalas parte da API pública da interface?
|
[]'s
Mantu
"Vou lançar o 'Caguei'. Caguei para o 'Cansei'". Luciano Camargo
"O povo votou contra a opinião pública". Um certo jornalão da mídia golpista, a respeito da vitória de um certo cadidato a presidente do Brasil.
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/03/2008 12:45:16
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
Isso foi sempre um abuso da especificação - constantes em interfaces é um recurso "deprecated".
Algumas coisas do Java 1.0 são assim (constantes em interfaces, em vez de usar enums, e falta de generics), segundo o sr. James Gosling, por falta de tempo mesmo.
O que você não pode fazer é ficar como seu professor, que aprendeu Java na versão 1.0 e nunca mais se atualizou - pode ser que ele ache que applets são o recurso mais moderno da Internet, por exemplo.
|
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/03/2008 13:04:10
|
Mantu
GUJ Ranger
![[Avatar]](/images/avatar/35285aa740b37f0b1933da97bf4ca4b9.jpg)
Membro desde: 27/03/2006 09:05:16
Mensagens: 961
Localização: São Paulo/SP
Offline
|
Desculpem ser chato, mas por quê, exatamente, é um abuso da especificação? Quais são os efeitos colaterais de se ter constantes em interfaces? Ou não se deve usa-las lá tão somente porque a especificação não foi explicita quanto a tal uso?
|
[]'s
Mantu
"Vou lançar o 'Caguei'. Caguei para o 'Cansei'". Luciano Camargo
"O povo votou contra a opinião pública". Um certo jornalão da mídia golpista, a respeito da vitória de um certo cadidato a presidente do Brasil.
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/03/2008 13:27:04
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
É assim: na maior parte das linguagens que têm um recurso parecido com o de interfaces (como C++ que tem classes abstratas), não existe esse tal recurso de constantes fazendo parte da interface. Se algo é diferente das outras linguagens aparentadas (como C ou Algol), é para ter alguma razão.
Pelo que imagino, não houve tempo de criar uma "enum" do jeito certo (na verdade o Gosling até esqueceu de deixar reservada essa palavra-chave, o que deu problemas depois), e era bem mais simples aceitar que interfaces tivessem membros "public static final". Uma verdadeira "enum" talvez implicasse (naquele tempo) em ter um tipo de arquivo .class um pouco diferente, e outras interações chatas.
E é por isso que apareceu tal coisa, que na verdade é um quebra-galho.
|
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/03/2008 13:53:39
|
WillyKocher
JavaTeenager
Membro desde: 12/03/2007 14:47:07
Mensagens: 188
Offline
|
pelo visto o mantu ta querendo uma resposta mais concreta, e não uma resposta decorada da galera que aprendeu assim ai saí repetindo(não me xinguem sei que eu sou mero noob : D ) , porem mantu eu acho que a coisa é mesmo so por aí não um motivo técnico para não hà por constantes em interfaces(creio eu porque não sei como ficam esses dados na memoria e como a jvm acessa eles) é simplismente para seguir um padrão de não ficar misturando as coisas é somente uma organização, coisas parecidas você agrupa certo ? você não poe um livro na prateleira de trofeus , voce poe prateleira de livros , certo ? ahhah não sou muito bom com exemplos =x
This message was edited 2 times. Last update was at 28/03/2008 13:56:54
|
SCJP 6.0 - 91%
SCWCD 5.0 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/03/2008 14:02:21
|
thegoergen
Virtual Machine Man
![[Avatar]](/images/avatar/7da9e0bb90d7f5b27e9af974fe437abf.jpg)
Membro desde: 24/09/2007 09:44:03
Mensagens: 583
Localização: Estrela/RS
Offline
|
Também acredito que seja para padronizar. COmo, por exemplo, criar métodos com a primera letra minúscula e com letras maiúsculas no início de cada palava... Nada impede de se usar os métodos com nomes todos em maiúsculas e com as palavras separdas por underlines... e o desempenho não muda...
|
"A preguiça de pensar é a maior burrice de uma pessoa." (Diego Inácio Goergen)
CV: Diego Inácio Goergen
Administrador da UNISCWiki e Medicina UNISC |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/03/2008 15:28:38
|
Ironlynx
Moderador
![[Avatar]](/images/avatar/93d65641ff3f1586614cf2c1ad240b6c.jpg)
Membro desde: 02/05/2003 01:06:41
Mensagens: 3515
Localização: The other side of the screen
Offline
|
Um exemplo que ele deu no texto eh a classe Math, que tem o Math.PI
Quando comecei a programar, achava o máximo lotar uma interface de constantes, dar um "implements qualquercoisa" e voilá, já tá disponível para uso.Sei lá, acho que o próprio contrato que se faz com uma interface(e o que a classe que a implementa deve fazer), já prevê, uma suposta "mutabilidade" do código da classe que implementa seus métodos.Uma constante, como o nome diz, dificilmente será mudada.
Uso Enum, em geral, quando preciso validar algo.Uso uma classe de constantes, quando são constantes meramente numéricas ou que guardam configuração de alguma coisa.Mas acho que vai de cada um...
|
Não basta persistir...tem que prevalecer!
Ironlynx
Anarquista de Sistemas
http://osereojava.blogspot.com/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/03/2008 16:06:11
|
Leonardo3001
GUJ Ranger
Membro desde: 04/07/2007 18:28:58
Mensagens: 975
Offline
|
Constantes são ruins, independente de estarem em interfaces ou classes. Elas tem tipagem fraca (é tudo int ou String) e não-OO (essa constante não se refere a um domínio de negócio que possui ações associadas?), e normalmente está lá para ser usado em blocos switch, o inimigo número um do polimorfismo.
O melhor mesmo é usar enum. O programa não compila quando coloca um número qualquer no lugar da constante, e se houver métodos associado às constante, basta declarar dentro do enum.
|
Leonardo Veríssimo
-------------------------------------------------
Objectzilla |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/03/2008 17:30:45
|
sergiotaborda
GUJ Expert
![[Avatar]](/images/avatar/b4a0e0fbaa9f16d8947c49f4e610b549.png)
Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline
|
Mantu wrote:Desculpem ser chato, mas por quê, exatamente, é um abuso da especificação? Quais são os efeitos colaterais de se ter constantes em interfaces? Ou não se deve usa-las lá tão somente porque a especificação não foi explicita quanto a tal uso?
O problema é que ao implementar a interface vc ganha de bonus todas as constantes.
Por exmeplo
O Java não diferencia se vc está chamando a constante na interface ou na classe que a implementa.
Quando vc define um EstadoC na propria classe de implementação (nada o impede) - o que é errado - vira tudo uma confusão. O compilador, coitado, não pode ajudar em nada.
|
Criando sua própria API de Validação
Blog do MiddleHeaven |
|
|
 |
|
|