匿名类和静态内部类的最佳实践(设计和性能方面)是什么?
就我个人而言,我认为静态内部类提供了更好的封装,并且应该提供更好的性能,因为它们无法访问类之外的最终变量。但我从来没有真正质疑过这一点。
我发现了一篇关于此的帖子,但我觉得它实际上并没有回答这个问题,只是人们对此的个人想法。
内部类(静态或非静态)与匿名类对其封闭类的字段和方法具有完全相同的访问权限,静态内部类(实际上称为嵌套类)和(常规,非静态)内部类之间的区别在于静态内部类需要对封闭类的实例进行显式引用才能访问某些内容。当然,当您需要这样做时,通常是在创建内部类的封闭类的实例上,因此使用非静态内部类更容易、更清晰。
例子:
-
内部类(非静态)
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
}
}
}
}
您是否使用这种可访问性是另一个问题。如果您确实访问封闭类的私有字段,则会生成一个访问器,因此它could影响性能,因为调用方法的成本与访问字段的成本不同,但在大多数情况下可能可以忽略不计。在进行不基于任何测量的微优化之前,您应该始终首先编写正确的代码(无论是在设计还是功能方面)。无论如何,JIT 编译器可以为您做很多事情。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)