匿名类和静态内部类的最佳实践(设计和性能明智)是什么?内部/匿名类的最佳实践
我个人认为静态内部类提供了更好的封装,并且应该提供更好的性能,因为他们没有访问类之外的最终化变量。但我从来没有真正质疑过这一点。
我找到了一篇关于这个帖子的文章,但是我觉得它并没有真正回答这个问题,只是人们对它的个人想法。
匿名类和静态内部类的最佳实践(设计和性能明智)是什么?内部/匿名类的最佳实践
我个人认为静态内部类提供了更好的封装,并且应该提供更好的性能,因为他们没有访问类之外的最终化变量。但我从来没有真正质疑过这一点。
我找到了一篇关于这个帖子的文章,但是我觉得它并没有真正回答这个问题,只是人们对它的个人想法。
内部类(静态或没有)正是其封闭类的领域和方法,匿名类相同的访问中,静态内部类之间的区别(行为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