Garantir que construtores sejam protected  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
Jedi_FeniX
Virtual Machine Man
[Avatar]

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
Rafael Nunes
Moderador
[Avatar]

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
[Email]
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

Jedi_FeniX
Virtual Machine Man
[Avatar]

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
Giulliano
GUJ Master
[Avatar]

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>
[Email] [WWW] [MSN]
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.
Giulliano
GUJ Master
[Avatar]

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>
[Email] [WWW] [MSN]
Jedi_FeniX
Virtual Machine Man
[Avatar]

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
Giulliano
GUJ Master
[Avatar]

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>
[Email] [WWW] [MSN]
Jedi_FeniX
Virtual Machine Man
[Avatar]

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
Giulliano
GUJ Master
[Avatar]

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>
[Email] [WWW] [MSN]
Jedi_FeniX
Virtual Machine Man
[Avatar]

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
Giulliano
GUJ Master
[Avatar]

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>
[Email] [WWW] [MSN]
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.
gomesrod
GUJ Ranger
[Avatar]

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
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team