IllegalAccessException en el atributo público de una clase interna [cerrado]

Estaba construyendo una clase usando Play Framework 1.2.x.

Tengo una clase de controlador que contiene una clase interna privada no anónima (nombrada).

Cuando intento acceder a uno de los campos públicos de la clase interna a través de su constructor, aparece el siguiente error Excepción de acceso de clase interna no anónima

El código de seguridad

private static class FinancialTransactionJSONPacket implements JSONPacket{
    public final boolean isSuccess;
    public final List<FinancialTransaction> financialTransactions;
    public final  OPERATIONS operation;

    public FinancialTransactionJSONPacket(boolean isSuccess,FinancialTransaction financialTransaction,OPERATIONS operation) {           
        this(isSuccess,new ArrayList<FinancialTransaction>(),operation);
/* Line 43 */   this.financialTransactions.add(financialTransaction);           
    }
}

No entiendo la lógica, ¿cómo es esto posible? Estoy accediendo a un atributo de una clase desde dentro de su constructor. ¿Cómo importan los especificadores de acceso?

Intenté buscar y encontré este artículo pero se relaciona con las clases internas anónimas, y la solución propuesta es hacer que la clase interna anónima sea una clase con nombre.

Declaraciones

  • public final List<FinancialTransaction> financialTransactions;
  • private static class FinancialTransactionJSONPacket

preguntado el 22 de mayo de 12 a las 07:05

El código es ilegible. Publíquelo aquí como texto formateado. -

Ok Agregué el código como texto formateado -

¿Cuál es el problema con la pregunta, por qué el -1? -

1 Respuestas

La clase estática es privada, por lo que solo la clase envolvente puede acceder a sus miembros, sean públicos o no.

No puedo ver ninguna evidencia en su gráfico ilegible de que el acceso esté ocurriendo dentro del propio constructor de la clase estática. Cuando lo miro, parece más como si una clase externa estuviera tratando de acceder a las entrañas de la clase.

NB Esta no es una clase interna, porque es estática.

contestado el 22 de mayo de 12 a las 07:05

No puedo agrandar la imagen en la página. Haga clic en ella y se abrirá en tamaño completo. - Gautam

@GautamK OK, hice eso. Simplemente confirma mi respuesta. Estás haciendo la pregunta equivocada aquí. - user207421

financialTransactions es un public final atributo de la clase interna, y estoy accediendo desde el constructor de la clase interna, ahora, ¿qué hay de malo en eso? - Gautam

@GautamK Eso no es lo que dice en el seguimiento de la pila. Míralo bien. El seguimiento de la pila habla de una clase externa que intenta acceder al campo. - user207421

¿Pero ni siquiera sé cuál es esa clase? ¿Por qué está accediendo a mi código? - Gautam

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.