| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/09/2008 10:16:49
|
Jedi_FeniX
Virtual Machine Man
![[Avatar]](/images/avatar/06ab8d9df63b836129099247301c038b.jpg)
Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline
|
Gostaria de garantir que um determinado grupo de classes, ou seja, que implementam uma determinada interface, só tivesse construtores protected, tem como fazer isso?
This message was edited 1 time. Last update was at 02/09/2008 10:21:58
|
www.bau-de-dev.com |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/09/2008 10:21:30
|
Rafael Nunes
Moderador
![[Avatar]](/images/avatar/d072677d210ac4c03ba046120f0802ec.png)
Membro desde: 09/10/2003 13:41:06
Mensagens: 2890
Localização: sao bernardo do campo
Offline
|
Provavelmente só com Reflection.
Mas por que você precisa fazer isso?
Isso me cheira a gambiarra.
|
------------------------------------------------------------------
"Think different? I'd be happy if most people would just think..."
http://www.yaw.com.br
http://twitter.com/rafanunes
http://twitter.com/youandwe
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/09/2008 10:23:10
|
cleuber_s
Entusiasta Java
Membro desde: 22/07/2004 17:41:18
Mensagens: 15
Offline
|
Vc pode fazer isso com aspectos: AspectJ.
Ou alterar na mão todos os contrutores que quiser.
This message was edited 1 time. Last update was at 02/09/2008 10:23:44
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/09/2008 10:25:34
|
Jedi_FeniX
Virtual Machine Man
![[Avatar]](/images/avatar/06ab8d9df63b836129099247301c038b.jpg)
Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline
|
Eu gostaria de fazer isso para garantir que no funturo quem quiser extender as minhas classes não deixe os construtores públicos e que estas classes só sejam instanciadas através de uma factory.
Nunca usei AspectJ, teria algum material para indicar?
|
www.bau-de-dev.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/09/2008 10:28:01
|
Giulliano
GUJ Master
![[Avatar]](/images/avatar/7f5a17b792b687fc4c227a5c5e569dd8.jpg)
Membro desde: 14/11/2006 19:29:38
Mensagens: 1627
Localização: São Paulo
Offline
|
interfaces não definem construtores...
construtires não são herdados...
logo isso não funciona dessa maneira...
solução: definir na mão os construtores q devem ser "protecteds"
|
Oracle Certified Master, Java EE 5 Enterprise Architect
Oracle Certified Professional Java Programmer
GiuLLianO MoRRoNi
<UnTouChAbLe> |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/09/2008 10:30:29
|
cleuber_s
Entusiasta Java
Membro desde: 22/07/2004 17:41:18
Mensagens: 15
Offline
|
http://www.javafree.org/content/view.jf?idContent=182
http://www.cin.ufpe.br/~scbs/talp1/
Não é algo muito trivial, veja sempre a real necessidade de se fazer com aspectos.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/09/2008 10:32:01
|
Giulliano
GUJ Master
![[Avatar]](/images/avatar/7f5a17b792b687fc4c227a5c5e569dd8.jpg)
Membro desde: 14/11/2006 19:29:38
Mensagens: 1627
Localização: São Paulo
Offline
|
cleuber_s wrote:http://www.javafree.org/content/view.jf?idContent=182
http://www.cin.ufpe.br/~scbs/talp1/
Não é algo muito trivial, veja sempre a real necessidade de se fazer com aspectos.
Nesse caso especifico EU não recomendo aspecto. Vai gerar dor de cabeça.
|
Oracle Certified Master, Java EE 5 Enterprise Architect
Oracle Certified Professional Java Programmer
GiuLLianO MoRRoNi
<UnTouChAbLe> |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/09/2008 10:40:18
|
Jedi_FeniX
Virtual Machine Man
![[Avatar]](/images/avatar/06ab8d9df63b836129099247301c038b.jpg)
Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline
|
A respeito das interfaces não terem construtores eu já sabia, e construtores são herdados sim.
|
www.bau-de-dev.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/09/2008 10:47:16
|
Giulliano
GUJ Master
![[Avatar]](/images/avatar/7f5a17b792b687fc4c227a5c5e569dd8.jpg)
Membro desde: 14/11/2006 19:29:38
Mensagens: 1627
Localização: São Paulo
Offline
|
Jedi_FeniX wrote:A respeito das interfaces não terem construtores eu já sabia, e construtores são herdados sim.
Os construtores não são herdados da interface....ou eu não sei fazer isso ?!?!?!
|
Oracle Certified Master, Java EE 5 Enterprise Architect
Oracle Certified Professional Java Programmer
GiuLLianO MoRRoNi
<UnTouChAbLe> |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/09/2008 10:50:27
|
Jedi_FeniX
Virtual Machine Man
![[Avatar]](/images/avatar/06ab8d9df63b836129099247301c038b.jpg)
Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline
|
Realmente vc não tem como herdar construtores, até porque vc já falou mais acima que interfaces não tem construtores e eu confirmei na minha útlima mensagem. Mas se vc fizer uma classe herdar da outra, a classe filha herda os contrutores sim.
|
www.bau-de-dev.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/09/2008 10:53:16
|
Giulliano
GUJ Master
![[Avatar]](/images/avatar/7f5a17b792b687fc4c227a5c5e569dd8.jpg)
Membro desde: 14/11/2006 19:29:38
Mensagens: 1627
Localização: São Paulo
Offline
|
Então...foi isso q lhe sugeriram....vc cria as classes e define os construtores na mão. Depois pode ir herdando essas classes pais.
Só via interface que não daria pra resolver isso.
|
Oracle Certified Master, Java EE 5 Enterprise Architect
Oracle Certified Professional Java Programmer
GiuLLianO MoRRoNi
<UnTouChAbLe> |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/09/2008 10:58:43
|
Jedi_FeniX
Virtual Machine Man
![[Avatar]](/images/avatar/06ab8d9df63b836129099247301c038b.jpg)
Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline
|
Mas não tem garantir que outra pessoa que extenda estas classes não coloque o construtor da filha como public?
|
www.bau-de-dev.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/09/2008 11:06:41
|
Giulliano
GUJ Master
![[Avatar]](/images/avatar/7f5a17b792b687fc4c227a5c5e569dd8.jpg)
Membro desde: 14/11/2006 19:29:38
Mensagens: 1627
Localização: São Paulo
Offline
|
Entao cara...agora falando de OO....
vc cria as suas classes pensando em suas regras de negócio de hoje. Se daqui alguns anos as coisas mudam vc precisa deixar que um futuro programador venha e extenda as suas classes e mude o que for preciso....se vc forçar o cara pode ser que sua aplicação seja inutililizada no futuro.
|
Oracle Certified Master, Java EE 5 Enterprise Architect
Oracle Certified Professional Java Programmer
GiuLLianO MoRRoNi
<UnTouChAbLe> |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/09/2008 11:17:02
|
cleuber_s
Entusiasta Java
Membro desde: 22/07/2004 17:41:18
Mensagens: 15
Offline
|
Eu não conheço o problema, nem o contexto. Por isso não posso recomendar nem NÃO recomendar aspectos.
No entanto se no futuro houver necessidade de não mais proteger os construtores, é mais um ponto pra aspectj. É muito fácil desacoplar.
O que eu posso recomendar é que avalie a implementação de aspectos, e tente buscar padrões de projeto que possam resolver a situação.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/09/2008 13:27:32
|
gomesrod
GUJ Ranger
![[Avatar]](/images/avatar/5de6755473dc988fe6c7db81f26a53ac.jpg)
Membro desde: 11/05/2007 19:46:22
Mensagens: 901
Offline
|
Você não pode obrigar, pode no máximo pedir encarecidamente através de documentação. Um exemplo dessa situação é a interface SortedSet do framework de Collections do Java. No javadoc ela diz como devem ser os construtores das classes implementadoras, e depois lembra que não há como assegurar-se que a orientação vai ser seguida.
All general-purpose sorted set implementation classes should provide four "standard" constructors: (...) There is no way to enforce this recommendation (as interfaces cannot contain constructors) but the SDK implementation (the TreeSet class) complies.
http://java.sun.com/j2se/1.4.2/docs/api/java/util/SortedSet.html
|
|
|
 |
|
|