Me preguntaba, ya que incluso la clase interna es pública ¿por qué tenerlo como anidado y no una clase separada?
Eso es realmente una pregunta para quien escribió la clase. Sin embargo, puede permitir que la clase externa actúe como un "mini-espacio de nombres": si la clase anidada es solo útil en el contexto de la clase externa, parece razonable. Indica acoplamiento apretado deliberado entre las dos clases.Me veo más a menudo esto en el contexto de la Builder:
Foo foo = new Foo.Builder().setBar(10).build();
Aquí tiene sentido para mí tener Foo.Builder
anidada dentro de Foo
más que como una clase de pares que presumiblemente se llamaría FooBuilder
.
Tenga en cuenta que también ofrece algunas diferencias de visibilidad en comparación con las clases no relacionadas.
Además, ¿puedo hacer esto aquí: new A.B(SomeObject)
?
No, porque B
no tiene un constructor con un parámetro SomeObject
- solamente A
va (en el ejemplo que hemos dado).
me siento de esta derrota el propósito de una clase estática
Usted debe tratar de llegar a exactamente lo que consideran el propósito de una clase estática a ser, y de qué manera esta derrota que propósito. Actualmente esa es una declaración demasiado vaga para ser discutida de manera realista.
buena explicación Jon ... +1 de mí ... – pratikabu