iç sınıflar kendi kapsayan sınıf alanları ve anonim sınıflar olarak yöntemlerine tam olarak aynı erişime sahip anlamak için, Statik iç sınıflar arasındaki fark (iç içe geçmiş sınıflar olarak adlandırılır) ve (normal, statik olmayan) iç sınıflar, statik olanın, bir şeylere erişmek için kapalı sınıfın bir örneğine açık bir referansa gerek duymasıdır. Tabii ki, bunu yapmanız gerektiğinde, genellikle içsel sınıfı yaratan ek sınıfın örneğidir, bu yüzden statik olmayan bir iç sınıfı kullanmak daha kolay ve daha nettir.
Örnekler:
- (statik olmayan)
class A {
private int field;
private class B {
public void doSomething() {
field++; // Valid
}
}
}
İç içe sınıfı (yani, "statik iç sınıfı")
class A {
private int field;
private static class B {
public void doSomething(A a) {
a.field++; // Valid
}
}
}
Anonim sınıfı
İç sınıf
class A {
private int field;
public void doSomething() {
new Runnable() {
@Override
public void run() {
field++; // Valid
}
}
}
}
Bu erişilebilirliği kullanmanız başka bir sorudur. Ekleyen sınıfın özel alanlarına erişirseniz, oluşturulan bir erişimci olacaktır, bu nedenle , bir yönteme çağrı yapma maliyetinin bir alana erişme maliyetiyle aynı olmadığından performansı etkileyebilir, ancak büyük olasılıkla önemsiz olacaktır. çoğu durumda. Herhangi bir ölçüme dayanmayan mikro optimizasyonlar yapmadan önce her zaman doğru kodu (her ikisi de tasarım ve işlevsellik açısından) yazmalısınız. JIT derleyicisi zaten sizin için bir çok şey yapar.
Bu bağlamdaki performans hakkında düşünmedim. Ama tasarım: Tasarım işlevi takip eder. Statik iç içe geçitlerin “en iyi uygulama” olduğu ve anonim morallerin olduğu başka senaryolar olduğu sanırım. – Fildor
Performans muhtemelen göz ardı edilebilir olacak ... Ama bu konuda biraz merak ediyorum. – David