Pregunta

Estoy usando un analizador estático en Eclipse para examinar mi código. Una clase, foo, tiene una clase interna, bar. Estoy consiguiendo el error siguiente:

JAVA0043 Inner class 'bar' does not use outer class 'foo'

¿Por qué es esto un error? Mientras la clase externa utiliza la clase interna no es la suficiente para hacer que este ocultamiento de información útil y correcta?

La clase interna no es estática.

¿Fue útil?

Solución

Si la clase interna solamente nunca puede ser utilizado por la clase externa, sin embargo, la clase interna no necesita ninguna referencia a la clase externa, entonces usted puede hacer que sea private static.

Si la clase interna se conoce a alguien que no sea la clase externa, entonces podría ser también una clase de nivel superior en su propio derecho.

Otros consejos

Parece una Enerjy error :

// Incorrect
class Log {
  // Position never uses the enclosing Log instance,
  // so it should be static
  class Position {
    private int line;
    private int column;
    Position(int line, int column) {
      this.line = line;
      this.column = column;
    }
  }
}

Una clase anidada que no utiliza ningún variables o métodos de instancia de cualquiera de sus clases exteriores puede ser declarado estática .
Esto reduce la dependencia entre las dos clases, lo que mejora la legibilidad y mantenimiento.

// Correct
class Log {
  static class Position {
    private int line;
    private int column;
    Position(int line, int column) {
      this.line = line;
      this.column = column;
    }
  }
}

Si no se toma ninguna referencia a la clase externa, que bien podría ser una clase lleno-en, regular. Ya que no depende de la clase externa, que puede valerse por sí misma. Sospecho que es la razón de la "error".

A clase interna no estática tiene una referencia implícita a una instancia de su clase externa. Esta referencia oculta puede retrasar (o incluso prevenir) la recolección de basura en la clase externa y crear problemas de serialización. Por lo que sólo debe utilizar las clases internas no estáticos cuando los necesite. Es fácil olvidar que declarar la clase estática, por lo que el análisis de código le avisa cuando no se necesita.

El punto de la clase interna es que tiene acceso a la clase externa. Si usted no está realmente usando la clase externa, solo que sea una clase en toda regla regular.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top