5

我在 Eclipse 中使用静态分析器来检查我的代码。一个类 foo 有一个内部类 bar。我收到以下错误:

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

为什么这是一个错误?只要外部类使用内部类就不足以使这些信息隐藏有用和正确吗?

内部类不是静态的。

4

5 回答 5

11

看起来像Enerjy 错误

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

不使用任何外部类中的任何实例变量或方法的嵌套类可以声明为 static
这减少了两个类之间的依赖关系,从而增强了可读性和维护性。

// Correct
class Log {
  static class Position {
    private int line;
    private int column;
    Position(int line, int column) {
      this.line = line;
      this.column = column;
    }
  }
}
于 2009-07-15T18:07:02.320 回答
7

如果它没有对外部类进行任何引用,那么它也可能是一个完整的常规类。由于它不依赖于外部类,它可以独立存在。我怀疑这就是“错误”的原因。

于 2009-07-15T18:02:40.893 回答
7

如果内部类只能被外部类使用,而内部类不需要对外部类的引用,那么你可以制作它private static

如果内部类为外部类以外的其他人所知,那么它本身也可能是一个顶级类。

于 2009-07-15T18:08:10.103 回答
5

非静态内部类具有对其外部类实例的隐式引用。这种隐藏的引用会延迟(甚至阻止)外部类的垃圾收集并产生序列化问题。因此,您应该只在需要时使用非静态内部类。很容易忘记将类声明为静态,因此代码分析会在不需要时向您发出警告。

于 2009-07-15T18:38:54.287 回答
1

内部类的全部意义在于它可以访问外部类。如果您实际上没有使用外部类,只需将其设为常规的、成熟的类即可。

于 2009-07-15T18:02:59.100 回答