我使用Eclipse的一个静态分析程序来检查我的代码。一类,FOO,有一个内部类,酒吧。我收到以下错误:

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

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

在内部类不是静态的。

有帮助吗?

解决方案

如果内部类永远只能通过外部类中使用,但内部类不需要参考外类,则可以使其private static

如果内部类是已知的比外类以外的其他人,那么它也可能是在其自己的权利的顶层类。

其他提示

看起来像一个 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;
    }
  }
}

这不使用任何实例变量或方法从任何其外类的嵌套类可以被声明静态即可。结果 这降低了两个类之间的依赖关系,这增强可读性和维护。

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

如果它不使外部类的任何引用,它也可能是全对,普通班。由于它不依赖于外部类,它可以站在自己的。我怀疑这对“错误”的原因。

一个非静态内部类具有其外类的一个实例的隐式引用。这个隐藏的参考可以延迟(甚至阻止)垃圾收集在外部类并创建序列化问题。所以,当你需要的时候,你应该只使用非静态内部类。这是很容易忘记声明类静态的,所以代码分析警告,你是不是需要的时候。

内部类的全部要点是,它有访问外部类。如果你不是真正的使用的外部类,只是让一个常规,全面的类。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top