2009-07-15 132 views
5

我在Eclipse中使用靜態分析器來檢查我的代碼。一個班,foo,有一個班級,一個班級。我收到以下錯誤:在Java中沒有使用外部類的內部類有什麼問題?

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

爲什麼這是錯誤?只要外部類使用內部類不足以使此信息隱藏有用和正確?

內部類不是靜態的。

+0

內部類是靜態的嗎? – skaffman 2009-07-15 18:08:39

+0

@skaffman內部類不是靜態的。 – user128807 2009-07-15 19:23:58

+1

你應該使它靜態。 – Ron 2009-07-15 19:25:35

回答

7

如果內部類永遠只能通過外部類中使用,但內部類不需要參考外部類,那麼你可以把它private static

如果內部類別是外部類別以外的其他人員所瞭解的,那麼它本身也可能是頂級類別。

7

如果沒有引用外部類,那麼它可能是一個全功能的普通類。由於它不依賴於外部階級,它可以獨立存在。我懷疑這是「錯誤」的原因。

1

內部類的要點是它可以訪問外部類。如果你實際上並不是,那麼使用這個外部類,就可以讓它成爲一個普通的,全面的類。

11

看起來像一個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; 
    } 
    } 
} 
5

非靜態內部類對其外部類的實例有一個隱式引用。這個隱藏的引用可以延遲(甚至阻止)外部類的垃圾回收併產生序列化問題。所以你應該只在需要時使用非靜態的內部類。很容易忘記聲明類是靜態的,因此代碼分析會在不需要時提醒您。

相關問題