Quel est le problème avec une classe interne ne pas utiliser une classe externe en Java?

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

  •  16-09-2019
  •  | 
  •  

Question

J'utilise un analyseur statique dans Eclipse pour examiner mon code. Une classe, foo, a une classe interne, bar. Je reçois l'erreur suivante:

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

Pourquoi est-ce une erreur? Tant que la classe externe utilise la classe interne est pas suffisante pour rendre cette information cacher utile et correcte?

La classe interne n'est pas statique.

Était-ce utile?

La solution

Si la classe interne ne peut jamais être utilisé par la classe externe, mais la classe interne ne nécessite aucune référence à la classe externe, alors vous pouvez le faire private static.

Si la classe interne est connu pour quelqu'un d'autre que la classe externe, il pourrait aussi bien être une classe de haut niveau dans son propre droit.

Autres conseils

On dirait un Enerjy erreur :

// 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;
    }
  }
}

Une classe imbriquée qui n'utilise pas toutes les variables d'instance ou des méthodes de l'une des ses classes extérieures peut être déclarée statique .
Cela réduit la dépendance entre les deux classes, ce qui améliore la lisibilité et l'entretien.

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

Si cela ne fait aucune référence à la classe externe, il pourrait aussi bien être un plein sur, classe régulière. Comme il ne dépend pas de la classe externe, il peut se tenir debout sur ses propres. Je pense que c'est la raison de la « erreur ».

Une classe interne non-statique a une référence implicite à une instance de la classe externe. Cette référence cachée peut retarder (ou même empêcher) la collecte des ordures sur la classe externe et créer des problèmes de sérialisation. Donc, vous ne devez utiliser les classes internes non statiques lorsque vous en avez besoin. Il est facile d'oublier de déclarer la classe statique, l'analyse de code vous avertit quand il est pas nécessaire.

Le point de l'ensemble de la classe interne est qu'il a accès à la classe externe. Si vous n'êtes pas réellement avec la classe externe, juste faire une base régulière, classe entière.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top