匿名類和靜態內部類的最佳實踐(設計和性能明智)是什麼?內部/匿名類的最佳實踐
我個人認爲靜態內部類提供了更好的封裝,並且應該提供更好的性能,因爲他們沒有訪問類之外的最終化變量。但我從來沒有真正質疑過這一點。
我找到了一篇關於這個帖子的文章,但是我覺得它並沒有真正回答這個問題,只是人們對它的個人想法。
匿名類和靜態內部類的最佳實踐(設計和性能明智)是什麼?內部/匿名類的最佳實踐
我個人認爲靜態內部類提供了更好的封裝,並且應該提供更好的性能,因爲他們沒有訪問類之外的最終化變量。但我從來沒有真正質疑過這一點。
我找到了一篇關於這個帖子的文章,但是我覺得它並沒有真正回答這個問題,只是人們對它的個人想法。
內部類(靜態或沒有)正是其封閉類的領域和方法,匿名類相同的訪問中,靜態內部類之間的區別(行爲ually調用嵌套類)和(常規,非靜態)內部類是靜態的需要顯式引用封閉類的實例來訪問某些東西。當然,當你需要這樣做時,它通常在創建內部類的封閉類的實例上,所以使用非靜態內部類更容易和更清晰。
實例:
內部類(非靜態)
class A {
private int field;
private class B {
public void doSomething() {
field++; // Valid
}
}
}
嵌套類(即, 「靜態內部類」)
class A {
private int field;
private static class B {
public void doSomething(A a) {
a.field++; // Valid
}
}
}
匿名類
class A {
private int field;
public void doSomething() {
new Runnable() {
@Override
public void run() {
field++; // Valid
}
}
}
}
是否使用可訪問性是另一個問題。如果您訪問封閉類的私有字段,將會生成一個訪問者,因此它可能會影響性能,因爲調用方法的成本與訪問字段的成本不同,但它可能會忽略不計在大多數情況下。在進行基於任何測量的微優化之前,您應該始終先編寫正確的代碼(無論是在設計和功能方面)。無論如何,JIT編譯器會爲你做很多事情。
+1:...先寫正確的代碼... – Jayan
沒有靜態內部類,因爲它們無權訪問父類成員(即非靜態成員將無法從靜態上下文訪問)。我們稱這些是靜態嵌套類,像頂級或獨立類一樣工作。 –
@LeninkumarKoppoju事實上,他們被稱爲嵌套類,後來我學到了正確的名字。我會更新答案。然而,嵌套類可以訪問封閉類的任何成員,如果它具有對該類的一個實例的引用:'outer.privateInt = 42;'作品,這對另一個頂級類是不可能的。 –
有Java源代碼的集合和模式有樣品(他們是在JDK目錄下的src.zip的樣子。在Eclipse中,你可以閱讀內嵌幫助
代碼讀一本書Effective Java,看對於內部類瞭解如何工作static
,inner
和其他有用的interface
,enum
和其它類
沒有想過在這方面的表現。但設計:設計遵循功能。我想有些情景是靜態內部是「最佳實踐」,而其他人是匿名者。 – Fildor
性能可能會忽略不計......但我對它有點好奇。 – David