我在Eclipse中使用靜態分析器來檢查我的代碼。一個班,foo,有一個班級,一個班級。我收到以下錯誤:在Java中沒有使用外部類的內部類有什麼問題?
JAVA0043 Inner class 'bar' does not use outer class 'foo'
爲什麼這是錯誤?只要外部類使用內部類不足以使此信息隱藏有用和正確?
內部類不是靜態的。
我在Eclipse中使用靜態分析器來檢查我的代碼。一個班,foo,有一個班級,一個班級。我收到以下錯誤:在Java中沒有使用外部類的內部類有什麼問題?
JAVA0043 Inner class 'bar' does not use outer class 'foo'
爲什麼這是錯誤?只要外部類使用內部類不足以使此信息隱藏有用和正確?
內部類不是靜態的。
如果內部類永遠只能通過外部類中使用,但內部類不需要參考外部類,那麼你可以把它private static
。
如果內部類別是外部類別以外的其他人員所瞭解的,那麼它本身也可能是頂級類別。
如果沒有引用外部類,那麼它可能是一個全功能的普通類。由於它不依賴於外部階級,它可以獨立存在。我懷疑這是「錯誤」的原因。
內部類的要點是它可以訪問外部類。如果你實際上並不是,那麼使用這個外部類,就可以讓它成爲一個普通的,全面的類。
看起來像一個Enerjy Error:
// 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;
}
}
}
非靜態內部類對其外部類的實例有一個隱式引用。這個隱藏的引用可以延遲(甚至阻止)外部類的垃圾回收併產生序列化問題。所以你應該只在需要時使用非靜態的內部類。很容易忘記聲明類是靜態的,因此代碼分析會在不需要時提醒您。
內部類是靜態的嗎? – skaffman 2009-07-15 18:08:39
@skaffman內部類不是靜態的。 – user128807 2009-07-15 19:23:58
你應該使它靜態。 – Ron 2009-07-15 19:25:35