Estou desenvolvendo uma biblioteca que possui algumas classes que eu não gostaria que fossem instanciadas fora da minha lib. A única coisa que sei é que um construtor pode ser package protected, o que restringe sua instanciação ao pacote que pertence (certo?). Eu até poderia usar isso, o problema é que me obrigaria a usar uma estrutura de pacotes baseado nessa minha necessidade. Por exemplo, se eu tenho a seguinte estutura:
pacoteTipo1
ClasseTipo1A
ClasseTipo1B
pacoteTipo2
ClasseTipo2A
ClasseTipo2B
Digamos que a ClasseTipo1A precise instanciar alguma classe do pacoteTipo2 (ClasseTipo2A p.ex.) e eu não quisesse que essa mesma classe fosse instanciada fora da minha lib. A única maneira que encontrei foi mudando a estrutura de pacotes para
Daí eu declararia o construtor da classe ClasseTipo2A como package protected. Mas isso mudaria totalmente minha organização de pacotes. Existe alguma outra forma de fazer isso (sem ter que basear minha estrutura de pacotes nessa “segurança”) ? Outra forma seria declarar a ClasseTipo2A dentro da ClasseTipo1A, mas isso novamente mudaria minha estrutura.
Não sei se deu pra entender, achei difícil de explicar minha dúvida.
A questão é que usando classes internas eu teria que mudar a estrutura do meu código q deixaria de ter uma separação “funcional” e teria uma separação baseada nessa minha necessidade.
É que falando genericamente, fica meio dificil de pensar na situação…
Não seria mais fácil você dizer porque o ClasseTipo2A não pode estar visível para as outras classes? Dependendo do motivo, acho que não teria mesmo como fazer isso sem mudar a estrutura das suas classes…
Cara, não sei se te ajuda, mas o protected não é um modificador de acesso à uma classe. Se vc colocar protected vai ver a seguinte mensagem: “Illegal modifier for the class Default; only public, abstract & final are permitted” (no eclipse).
Vc tem que usar o acesso default. Cria sua classe assim:
[quote=Gustavokt]É que falando genericamente, fica meio dificil de pensar na situação…
Não seria mais fácil você dizer porque o ClasseTipo2A não pode estar visível para as outras classes? Dependendo do motivo, acho que não teria mesmo como fazer isso sem mudar a estrutura das suas classes…[/quote]
São diversas situações. De um modo geral, são classes de uso interno da biblioteca. Não queria expor as classes que uso internamente.
[quote=jakefrog] Cara, não sei se te ajuda, mas o protected não é um modificador de acesso à uma classe. Se vc colocar protected vai ver a seguinte mensagem: “Illegal modifier for the class Default; only public, abstract & final are permitted” (no eclipse).
Vc tem que usar o acesso default. Cria sua classe assim: [/quote]
Desculpe não fui muito claro, quando disse package protected estava justamente me referindo ao acesso default.
Minha questão é: Não tem como definir em uma lib quais classes serão de uso interno e quais serão de uso externo (da biblioteca), sem mexer na organização dos pacotes, que geralmente se organizam em alguma estrutura lógica? Entenderam? Se eu tenho uma estrutura definida logicamente, não é desejável mudá-la pra simplesmente para definir o acesso às classes. Me desculpem se estou falando uma besteira muito grande.