por qué compilar la clase interna no estática creará métodos ocultos y visibles en el paquete en la clase primaria [duplicado]

Esta pregunta ya tiene respuestas aquí :
Respuesta 1

Tenemos que distinguir entre el código fuente y el nivel JVM.

  • En el nivel del código fuente, la clase interna Innerpuede acceder, por ejemplo, a campos privados de la clase adjunta Enclosing.

  • En el nivel JVM, no existe el concepto de una clase interna: una clase interna es solo una clase independiente con un nombre especial (que normalmente contiene un signo $, por ejemplo Enclosing$Inner), ubicado en el mismo paquete que la Enclosingclase. Al igual que cualquier otra clase, esta Enclosing$Innerclase no puede acceder a Enclosinglos campos privados. Para permitir el acceso a los campos privados (como exige el nivel del código fuente), el compilador juega un truco: agrega secretamente captadores y establecedores a los campos, sin nombres sintéticos (no el clásico getField()y los setField()nombres), y hace que la clase interna use estos accesos métodos en lugar de un acceso directo al campo. Y como ambas clases están en el mismo paquete, los métodos de acceso deben permitir al menos la visibilidad del paquete, y así es como los crea el compilador.

Por lo tanto, estos métodos hacen posible que cualquier otra clase declarada en el mismo paquete, acceda a campos privados de la Enclosingclase, rompiendo la encapsulación normal de campos privados.

Depende de usted decidir si ese riesgo es importante, ya que desde Java existen otras posibilidades para romper las reglas de acceso. Entonces, personalmente, siempre he creado felizmente clases internas donde sea apropiado desde un punto de vista arquitectónico.

Respuesta: 2

Estoy tratando de agrupar algunos conjuntos en conjuntos disjuntos. Por ejemplo, si tengo estos 5 conjuntos: [[1, 3], [2], [1, 5], [6, 8], [1, 7]] Quiero tener este resultado: [[2] , [6, 8], [1, 3, 5, 7]] Aquí está el ...

Usando Pebble versión 3.0.6. Necesito verificar si el valor 'v' tiene una variable específica (traducido a Java: si Object v tiene una propiedad específica). Buscando algo como {% if v instanceof test.MyClass ...

Estoy haciendo una aplicación de escritorio en Java Swing usando la plataforma Netbeans. Quiero convertir una imagen en escala de grises de 16 bits en una imagen RGB. ¿Cómo puedo hacer eso?

Estoy siguiendo este tutorial sobre cómo configurar Corba, pero no puedo usar los paquetes de los que están hablando, y en ningún lugar de Internet puedo dar una explicación adecuada de cómo obtenerlos. Quiero el ...