| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/08/2003 18:19:32
|
le-silva
Java Ninja
![[Avatar]](/images/avatar/c6e19e830859f2cb9f7c8f8cacb8d2a6.jpg)
Membro desde: 31/01/2003 10:21:32
Mensagens: 260
Offline
|
Há a possibilidade de verificar diretamente na memória se existe uma instância de uma determinada classe? Existe alguma classe da API Java que proporcione isso?
Meu problema é: antes de instânciar uma classe, preciso saber se já existe uma instância (objeto) dela na memória; caso não exista, crio a "nova" instância.
Sei que posso usar o pattern singleton para realizar algo semelhante, mas não é o caso.
Obrigado
|
Leandro Silva
{ :blog => 'leandrosilva.com.br' , :twitter => '@codezone' } |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/08/2003 18:41:36
|
cv
Moderador
![[Avatar]](/images/avatar/210f760a89db30aa72ca258a3483cc7f.jpg)
Membro desde: 04/04/2003 00:32:12
Mensagens: 7842
Localização: São Paulo, SP
Offline
|
Por que, entao, nao é o caso?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/08/2003 18:48:33
|
maxguzenski
Virtual Machine Man
![[Avatar]](/images/avatar/d4c2e4a3297fe25a71d030b67eb83bfc.jpg)
Membro desde: 07/03/2003 11:47:42
Mensagens: 549
Localização: Porto Alegre
Offline
|
pode ser assim?
e no codigo:
|
Maximiliano Ferreira Guzenski
Sun Certified Java Programmer 1.4
Sun Certified Web Component Developer 1.4
http://www.guzenski.com.br |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/08/2003 18:51:00
|
le-silva
Java Ninja
![[Avatar]](/images/avatar/c6e19e830859f2cb9f7c8f8cacb8d2a6.jpg)
Membro desde: 31/01/2003 10:21:32
Mensagens: 260
Offline
|
Ei VMM? Qué isso?
Porque eu não quero ter que controlar classe por classe, mas sim, construir um repositório de instâncias.
Fui!
|
Leandro Silva
{ :blog => 'leandrosilva.com.br' , :twitter => '@codezone' } |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/08/2003 18:52:49
|
le-silva
Java Ninja
![[Avatar]](/images/avatar/c6e19e830859f2cb9f7c8f8cacb8d2a6.jpg)
Membro desde: 31/01/2003 10:21:32
Mensagens: 260
Offline
|
Ainda não resolve meu problema, pois se fosse esse o caso, eu usaria o pattern Singleton [GoF]. Mas... valeu o interesse em ajudar!
|
Leandro Silva
{ :blog => 'leandrosilva.com.br' , :twitter => '@codezone' } |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/08/2003 19:07:30
|
Rafael Steil
Administrador
![[Avatar]](/images/avatar/8e296a067a37563370ded05f5a3bf3ec.jpg)
Membro desde: 31/08/2002 02:35:53
Mensagens: 5984
Localização: São Paulo
Offline
|
Mas vc vai ter que fazer alguma coisa relacionada ao que o colega mostrou.. pode nao ser igual, mas algo no estilo:
Rafael
|
"working code attracts people who want to code. Design documents attract people who want to talk about coding - Charles Miller"
http://rafaelsteil.com
http://twitter.com/rafaelsteil
http://www.jforum.net
http://www.flickr.com/photos/rafaelsteil |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/08/2003 23:16:01
|
louds
Moderador
![[Avatar]](/images/avatar/1e48c4420b7073bc11916c6c1de226bb.jpg)
Membro desde: 29/04/2003 23:09:15
Mensagens: 4061
Localização: São Paulo
Offline
|
Use o pattern de Singleton Factory, o Paulo postou sobre ele em um tópico semelhante a um tempo atras.
Procure no forum por essa pattern.
Caso contrario vc pode implementar isso usando AOP, né cv?
Não teria como criar um point-cut, esse é o termo?, que interceptaria todas chamadas de new para as várias classes em questão e só instanciaria um objeto no caso de já não existir um registrado...
|
http://www.kumpera.net/blog/
http://www.mono-project.com/
"Each individual should work for himself. People will not sacrifice themselves for the company. They come to work at the company to enjoy themselves."
Soichiro Honda |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/08/2003 23:57:08
|
Rafael Steil
Administrador
![[Avatar]](/images/avatar/8e296a067a37563370ded05f5a3bf3ec.jpg)
Membro desde: 31/08/2002 02:35:53
Mensagens: 5984
Localização: São Paulo
Offline
|
Nossa, mas usar AOP nesse caso eh jogar uma Scania em cima de uma pulga.
Parece que ele ta querendo uma maneira "automatica" de fazer isso, sem modificar a classe... Mas eh meio insano, muito trabalho para pouco caso. Simplesmente implementar um verificador ( que seja uma forma de singleton ou qualquer outro creational relacionado ) resolve o problema.. eh tudo questao de boa vontade
Rafael
|
"working code attracts people who want to code. Design documents attract people who want to talk about coding - Charles Miller"
http://rafaelsteil.com
http://twitter.com/rafaelsteil
http://www.jforum.net
http://www.flickr.com/photos/rafaelsteil |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/08/2003 00:10:32
|
cv
Moderador
![[Avatar]](/images/avatar/210f760a89db30aa72ca258a3483cc7f.jpg)
Membro desde: 04/04/2003 00:32:12
Mensagens: 7842
Localização: São Paulo, SP
Offline
|
louds wrote:Caso contrario vc pode implementar isso usando AOP, né cv?
Não teria como criar um point-cut, esse é o termo?, que interceptaria todas chamadas de new para as várias classes em questão e só instanciaria um objeto no caso de já não existir um registrado...
Usar pointcuts pra retornar um objeto do pool ao inves de instanciar um novo e' uma coisa meio voodoo demais pro meu gosto, mas sim, eh perfeitamente possivel com AOP. Mas um bom factory te faz o mesmo aqui... entao nao tem mta utilidade usar AOP quando vc pode simplesmente tornar o construtor protected e colocar uma factory em cima, que faz o que bem entender com as instancias
Sobre advices em construtores, o AspectWerkz ainda nao os implementa por alguns probleminhas tecnicos... devem entrar na versao 0.10, prevista pra daqui mais ou menos um mes, mas, se vc estiver muito na seca pra brincar com isso, de uma olhada no AspectJ
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/08/2003 13:52:45
|
le-silva
Java Ninja
![[Avatar]](/images/avatar/c6e19e830859f2cb9f7c8f8cacb8d2a6.jpg)
Membro desde: 31/01/2003 10:21:32
Mensagens: 260
Offline
|
Aêêê javamans, valeu!!!
Conheço os patterns Factory e Singleton [GoF], mas o que eu realmente queria fazer, é garantir que não seria possível instânciar uma classe uma classe que já tivesse uma instância.
Por que? Porque algum programador malvado poderia se recusar a usar o factory e usar um "new" diretamente.
Tá, isso poderia ser garantido com o Singleton, né? Sim, mas eu não queria colocar código pra "singleton" em todas as class, mas sim, ter um controlador centralizado.
Acho que é utopia o que estou querendo, só achei que fosse possível de fazer! (mas talvez até seja )
|
Leandro Silva
{ :blog => 'leandrosilva.com.br' , :twitter => '@codezone' } |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/08/2003 14:31:58
|
Bani
JWizard
![[Avatar]](/images/avatar/6cdd60ea0045eb7a6ec44c54d29ed402.jpg)
Membro desde: 13/10/2002 23:17:37
Mensagens: 2443
Localização: São Paulo
Offline
|
Para não permitir que a pessoa utilize o new é só colocar o construtor privado (que é um dos itens da implementação de um singleton).
Realmente querer que a pessoa dê new e não crie um objeto novo creio que não seja possível, pois aí você vai ter que escrever um construtor para a classe e a primeira coisa que um construtor comum faz é chamar o construtor da superclasse (poderia ser outro construtor da mesma classe, mas não é o comportamento padrão, então nem adianta analisar a possiblidade) e não teria como você alterar toda a hierarquia até object para fazer o contrutor não criar um objeto novo.
|
~ Site da Bani ~ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/08/2003 14:49:52
|
le-silva
Java Ninja
![[Avatar]](/images/avatar/c6e19e830859f2cb9f7c8f8cacb8d2a6.jpg)
Membro desde: 31/01/2003 10:21:32
Mensagens: 260
Offline
|
Ah, sim, com certeza, construtor privado é obrigatório na implementação de um singleton. Mas, como já disse anteriormente, não é o caso.
O que eu gostaria, é de acessar a memória e saber se já existe instância de uma determinada classe. Se eu pudesse fazer isso, conseguiria implementar um "controlador global de instâncias", onde eu faria algo + ou - assim:
Manjô?
Mas beleza... vou construir um controlador desses (possívelmente um Factory) usando uma HashMap mesmo, ao invés de acessar a memória .
Se alguém der um "new", dou umas porradas nele!
Falow!
|
Leandro Silva
{ :blog => 'leandrosilva.com.br' , :twitter => '@codezone' } |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/08/2003 22:02:28
|
louds
Moderador
![[Avatar]](/images/avatar/1e48c4420b7073bc11916c6c1de226bb.jpg)
Membro desde: 29/04/2003 23:09:15
Mensagens: 4061
Localização: São Paulo
Offline
|
Se AOP é chutar demais o balde usa xdocket então...
crie uma tag @singleton que então gera o código necessario pra tornar tua classe um singleton...
|
http://www.kumpera.net/blog/
http://www.mono-project.com/
"Each individual should work for himself. People will not sacrifice themselves for the company. They come to work at the company to enjoy themselves."
Soichiro Honda |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/08/2003 23:09:38
|
cv
Moderador
![[Avatar]](/images/avatar/210f760a89db30aa72ca258a3483cc7f.jpg)
Membro desde: 04/04/2003 00:32:12
Mensagens: 7842
Localização: São Paulo, SP
Offline
|
le-silva wrote:Mas beleza... vou construir um controlador desses (possívelmente um Factory) usando uma HashMap mesmo, ao invés de acessar a memória  .
Se alguém der um "new", dou umas porradas nele!
Eu diria que resolver na porrada nao eh uma solucao mto amigavel, mas que pode funcionar se alguem conseguir passar por cima de um construtor private ou protected, por exemplo, enfiando um objeto no pacote errado só pra conseguir fazer isso
No mais, Factory, Factory, Factory.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/08/2003 13:39:38
|
le-silva
Java Ninja
![[Avatar]](/images/avatar/c6e19e830859f2cb9f7c8f8cacb8d2a6.jpg)
Membro desde: 31/01/2003 10:21:32
Mensagens: 260
Offline
|
O que é esse tal AOP?
|
Leandro Silva
{ :blog => 'leandrosilva.com.br' , :twitter => '@codezone' } |
|
|
 |
|
|