2012-02-14 19 views
35

Tengo dos paquetesMaking paquete protegido clase java visible en paquete principal

uk.co.planetbeyond.data 

y

uk.co.planetbeyond.data.bean 

¿Cómo puedo hacer que las clases presentes en uk.co.planetbeyond.data.bean visible para las clases en el paquete padres uk.co.planetbeyond.data pero invisible en otros paquetes?

¿Es posible?

+0

No creo que puedas; no hay realmente ninguna relación padre-hijo implícita en la jerarquía del paquete. –

+0

Nutshell: no. Así no funcionan los paquetes. –

Respuesta

38

Por lo que yo sé, no es posible. Si bien tendemos a pensar que paquetes forman una jerarquía, no lo hacen en lo que respecta al lenguaje Java.

4

No, no es posible. La visibilidad del paquete no se puede extender selectivamente a otros paquetes. Una clase solo puede ser privada (es decir, visible solo para una clase envolvente no privada), paquete-privada (sin modificador, visible solo para otras clases en el mismo paquete), o pública (visible para todas las clases).

4

Por lo que sé, no es posible en Java. Para obtener más información, consulte el enlace here que explica claramente los modificadores de acceso en Java.

7

Actualmente, esto no es posible. Los paquetes Java no son realmente de naturaleza jerárquica: las clases están en el mismo paquete o no.

Sin embargo, esta es una de las cosas que abordará Project Jigsaw, que puede incluirse en Java 8. Esto debería permitir la creación de clases que son públicas dentro de todos los paquetes de un módulo, pero no se exportan a otras módulos.

+10

Para cualquiera que lea (ahora un año después, al momento de escribir), Jigsaw se ha pospuesto a Java 9. – Cornstalks

25

Como se indica en todas las otras respuestas: No. La jerarquía del paquete no significa nada fuera de la mente de la persona que lo configuró.

En mi opinión, este es el principal defecto de Java. Al construir sistemas de monstruos fusionando otros programas de monstruos, nada supera al lenguaje de Java. Todos los otros idiomas eventualmente terminan en montones de códigos confusos, indocumentables e indescifrables.

Bueno, también lo hace Java, pero es mucho más que cualquier otro idioma que he usado. Pero su desconocimiento de la jerarquía de paquetes -la incapacidad de encapsular datos en una jerarquía de paquetes- es la limitación, o muro de ladrillos, que lo detiene. Puedo poner un sistema, o conjunto de clases que funcionan juntas, en un solo paquete. Entonces puedo hacer que un montón de esas clases sean privadas para que cuando este paquete se agregue a otro super-sistema , ese super-sistema no pueda ver -y ser confundido por- esas clases ocultas.

Pero si mi sistema ya está lo suficientemente super ("super" como en "Superman" y no "superclase") que necesita varios paquetes para mayor claridad, mis clases antes de paquetes-privada ahora deben ser públicas, y puedo No impida que el supersúper sistema vea todo en mi súper sistema.

Para hacer funcionar un vasto y complejo sistema, se debe minimizar la complejidad en cada punto. Mi súper-sistema tiene que verse lo más simple posible para el super-súper-sistema al que lo estoy agregando. Tener todos los tubos, alambres, vigas y soldaduras en exhibición pública porque no puedo hacerlos a nivel de paquete privado no ayuda.

Espero que Jigsaw, mencionado en otro lugar, ayude. También espero que las herramientas de desarrollo como IDE comiencen a mostrar paquetes en formato de esquema en lugar de tratar a.b y a.b.c.d.e como si estuvieran todos en el mismo nivel, solo elementos en la misma lista.

Cuestiones relacionadas