Cosa c'è di sbagliato con una classe interna non si usa un classe esterna in Java?

StackOverflow https://stackoverflow.com/questions/1132930

  •  16-09-2019
  •  | 
  •  

Domanda

Io sto usando un analizzatore statico in Eclipse per esaminare il mio codice. Una classe, foo, ha una classe interna, bar. Sto ottenendo il seguente errore:

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

Perché questo è un errore? Finché la classe esterna utilizza la classe interiore non è che sufficiente per rendere queste informazioni nascondere utile e corretta?

La classe interna non è statica.

È stato utile?

Soluzione

Se la classe interna può sempre e solo essere utilizzato dalla classe esterno, eppure la classe interna ha bisogno di alcun riferimento alla classe esterna, allora si può rendere private static.

Se la classe interna è noto per una persona diversa dal classe esterna, quindi potrebbe anche essere una classe di livello superiore a sé stante.

Altri suggerimenti

Sembra una Enerjy Errore :

// 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 classe annidata che non utilizza alcun variabili di istanza o metodi da una qualsiasi delle sue classi esterne può essere dichiarato static .
Questo riduce la dipendenza tra le due classi, che migliora la leggibilità e manutenzione.

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

Se non sta facendo alcun riferimento alla classe esterna, potrebbe anche essere una classe full-on, regolare. Dal momento che non dipende dalla classe esterna, si può stare in piedi da solo. Ho il sospetto che la ragione per il "errore".

Una classe interna non statica ha un implicito riferimento a un'istanza della sua classe esterna. Questo riferimento nascosto può ritardare (o addirittura impedire) la raccolta dei rifiuti sulla classe esterna e creare problemi di serializzazione. Per questo si deve utilizzare solo le classi interne non statici quando ne avete bisogno. E 'facile dimenticare di dichiarare la classe statica, quindi l'analisi del codice che si avverte quando non è necessaria.

Il punto di tutta la classe interna è che ha accesso alla classe esterna. Se non si è in realtà con classe esterna, basta fare una classe in piena regola regolare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top