Garantir que construtores sejam protected

Gostaria de garantir que um determinado grupo de classes, ou seja, que implementam uma determinada interface, só tivesse construtores protected, tem como fazer isso?

Provavelmente só com Reflection.

Mas por que você precisa fazer isso?
Isso me cheira a gambiarra.

Vc pode fazer isso com aspectos: AspectJ.

Ou alterar na mão todos os contrutores que quiser.

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?

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”

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.

[quote=cleuber_s]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.[/quote]

Nesse caso especifico EU não recomendo aspecto. Vai gerar dor de cabeça.

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 !!!

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.

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.

Mas não tem garantir que outra pessoa que extenda estas classes não coloque o construtor da filha como public?

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.

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.

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.

http://java.sun.com/j2se/1.4.2/docs/api/java/util/SortedSet.html