2013-07-21 108 views
2

privateprivate小號1000之後,它發生,我認爲它可能不需要是否需要聲明私有嵌套類的內部私有?

public class Outer { 

    private static class Inner { // you may drop static 
     private void innerMethod() {} 
    } 
} 

無論如何innerMethod()下降private將使在封裝(或使用差異 ,例如Outer)?也想想反射
如果不是是否建議放棄它或保持它的vis編碼風格?

我說沒有下降但不知道真的。

編輯:只是意識到我做到這一點肯定是錯誤的 - 至少對於Inner領域 - 宣稱這些領域的私人然後在外部類中使用它們 - 因爲這會產生(「合成的」)字節碼中的訪問器 - 這至少是膨脹的。好極了 - 所以現在我更感興趣的是對這些(Inner的字段,Outer中使用的字段,方法)包私有(或公開爲@JBNizet在評論中說)的安全影響進行說明。

+0

即使它沒有什麼區別,我通常會從封閉類public和其他private被調用的方法。不知道這是不是一個標準的做法。 –

+0

@JBNizet:'Outer'可以訪問所有內容 - 不是嗎?我會讓他們和私人無論如何 - 少修改一個 –

+1

是的,因此,「即使它沒有區別」的部分。 –

回答

5

答案取決於你目前如何使用內部類。

我的內部類哲學是減少重構的負擔。我維護內部類的封裝:private內部類的方法和字段是而不是即使它們可以從外部類訪問。那麼,內部類的重點是將其範圍縮小到僅包含類。這樣,如果稍後內部類可以在其他地方重用,它幾乎不需要工作(並且對於非內部類而言只需要少量的工作)就可以將其移入其自己的文件中。

無論以上是否是您的風格,都會影響以下刪除或保留方法/字段周圍private的原因。

用於丟棄private的原因是:

  • 外類訪問私有成員和內部類的方法,這意味着這樣的字段/方法不是真的包封
  • 少鍵入

反對下探private的原因是:

  • 製作一個內部類private的方法作爲文檔:在外部類不應使用這些方法
  • 如果private保持,這使得它更容易促進內部類,以它自己的文件
  • 如果private被刪除,有兩種款式供public內部類和private內部類:多爲程序員考慮
  • 如果private被丟棄,內部類製成public,突然大家誰有權訪問外部文件可以訪問內部類的priv吃數據

鑑於上述風格,我認爲防止下跌的情況更強。

+0

有效點 - 儘管是什麼(如果有的話)可以從外_。另外「使內部類的私有方法成爲文檔:外部類不應該使用這些方法」 - >我這樣做的方式使用它們 - 你的方式,如果內部是外部使用的外部方法無論如何突然變成私人包裝(不是「每個人都可以訪問」,除非你公開)。我認爲你需要總結你的觀點2和4是一樣的。 –

+0

@Mr_and_Mrs_D還好點;我做了一些編輯(並將繼續這樣做)。在我的風格中,我不會稱之爲內部類的「私人」方法。我的主要觀點是,省略'private'(或稱爲'private'方法)會使重構變得更加困難,我會盡量使這一點更加清晰。 – kuporific

+0

嗯 - 需要重新思考 - 請考慮安全隱患 - 也許這是真正的原因,而不是重構?請參閱:http://stackoverflow.com/a/5559064/281545。我的意思是這個方法不再是私有的 - 它是私有的 –