我在 Eclipse 中使用静态分析器来检查我的代码。一个类 foo 有一个内部类 bar。我收到以下错误:
JAVA0043 Inner class 'bar' does not use outer class 'foo'
为什么这是一个错误?只要外部类使用内部类就不足以使这些信息隐藏有用和正确吗?
内部类不是静态的。
我在 Eclipse 中使用静态分析器来检查我的代码。一个类 foo 有一个内部类 bar。我收到以下错误:
JAVA0043 Inner class 'bar' does not use outer class 'foo'
为什么这是一个错误?只要外部类使用内部类就不足以使这些信息隐藏有用和正确吗?
内部类不是静态的。
看起来像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;
}
}
}
如果它没有对外部类进行任何引用,那么它也可能是一个完整的常规类。由于它不依赖于外部类,它可以独立存在。我怀疑这就是“错误”的原因。
如果内部类只能被外部类使用,而内部类不需要对外部类的引用,那么你可以制作它private static
。
如果内部类为外部类以外的其他人所知,那么它本身也可能是一个顶级类。
非静态内部类具有对其外部类实例的隐式引用。这种隐藏的引用会延迟(甚至阻止)外部类的垃圾收集并产生序列化问题。因此,您应该只在需要时使用非静态内部类。很容易忘记将类声明为静态,因此代码分析会在不需要时向您发出警告。
内部类的全部意义在于它可以访问外部类。如果您实际上没有使用外部类,只需将其设为常规的、成熟的类即可。