Los paquetes (packages) en Java se utilizan para la agrupación lógica de clases, interfaces y subpaquetes. Esto ayuda a estructurar proyectos grandes, mejorar la legibilidad y la reutilización del código.
Funciones principales de los paquetes:
Creación y uso de un paquete:
package com.example.utils; public class MathUtils { public static int sum(int a, int b) { return a + b; } }
Para usar una clase de otro paquete:
import com.example.utils.MathUtils; public class Test { public static void main(String[] args) { System.out.println(MathUtils.sum(5, 7)); } }
¿Se puede definir un paquete en medio de un archivo de clase Java o no en la primera línea?
Respuesta: No, la directiva package debe ser la primera (no vacía) línea del archivo fuente de Java.
// ¡Incorrecto! import java.util.*; package com.example; // Error de compilación public class MyClass {}
Historia
En un proyecto real, olvidaron incluir la directiva
packageal principio del archivo. Después de la compilación, la clase terminó en el paquete por defecto, lo que provocó conflictos con clases homónimas de otras bibliotecas. Como resultado, surgieron errores de tipado y problemas al compilar el archivo JAR.
Historia
En un gran equipo, al trabajar con varios paquetes (por ejemplo, com.example y com.Example) surgió un problema de incompatibilidad entre Linux y Windows: Windows ignora la capitalización de las letras en las rutas, Linux no. Esto provocó errores inesperados en producción después del despliegue en un servidor con Linux.
Historia
Un desarrollador accidentalmente dio acceso
protecteda métodos importantes, pensando que no podrían ser vistos desde el exterior, pero no tuvo en cuenta que las clases dentro de un mismo paquete pueden acceder a estos miembros. Esto causó una filtración de la lógica de negocio interna a través de una API no destinada para uso externo.