Tengo dos unidades de compilación:Acceso a clase interna privada en el mismo paquete
public class OuterClass{
private static class InnerClass{
public String test(){
return "testing123";
}
}
public static void main(String[] args){
new CallingClass().test(new InnerClass());
}
}
public class CallingClass{
public void test(Object o){
try{
Method m = o.getClass().getMethod("test");
Object response = m.invoke(o);
System.out.println("response: " + response);
}
catch(Exception e){
e.printStackTrace();
}
}
}
Si están en el mismo paquete, todo funciona y "respuesta: testing123" se imprime. Si están en paquetes separados, se lanza IllegalAccessException.
Según tengo entendido, la excepción se produce porque CallingClass no puede invocar métodos privados de InnerClass. Pero lo que no entiendo es por qué está permitido en el mismo paquete? InnerClass no está protegido contra paquetes. Privado no debería ser visible fuera de OuterClass incluso si está en el mismo paquete. ¿Entiendo algo mal?
La clase que ha llamado 'InnerClass' _no_ es una clase interna. En realidad, es una clase anidada estática. (En Java, las clases anidadas son de dos variedades: estática e interna.) Ha planteado una buena pregunta, pero no tiene nada que ver con las clases internas, por lo que le sugiero que cambie el nombre de 'InnerClass' y también el título de la pregunta. – mernst