me he dado cuenta lo siguiente patrón de código mientras se navega a través de algunas fuentes de bibliotecas 3 ª parte de mi proyecto:¿Cuál es la ventaja de tener clases internas estáticas públicas de una interfaz/clase?
public interface MyInterface {
public static class MyClass1 implements MyInterface { ... }
public static class MyClass2 implements MyInterface { ... }
public static class MyClass3 implements MyInterface { ... }
}
O esta otra:
public class MyBaseClass {
public static class MyClass1 extends MyBaseClass { ... }
public static class MyClass2 extends MyBaseClass { ... }
public static class MyClass3 extends MyBaseClass { ... }
}
ejemplos de la vida real:
- SwingX:
org.jdesktop.swingx.decorator.HighlightPredicate
(Source) - Sustancia:
org.pushingpixels.substance.api.renderers.SubstanceDefaultTableCellRenderer
(Source)
¿Cuál es la ventaja de tener una estructura de código como esta?
Mi primer pensamiento fue "agregación", pero lo mismo podría lograrse utilizando paquetes antiguos. Entonces, ¿cuándo/por qué es mejor utilizar clases internas públicas en lugar de un paquete?
Yo no miro a los ejemplos de la vida real que ha publicado , pero una diferencia es que las clases internas pueden usar miembros privados de la clase externa, que no es el caso si fueran 'hermanos' (clases separadas de nivel superior) –
Buena pregunta. Personalmente, recomendaría evitar este patrón, ya que oculta las clases públicas en un lugar que, por lo general, la gente no espera encontrar, sin proporcionar ningún beneficio obvio para la compensación. Pero tal vez alguien más sepa cuál es el beneficio de este patrón. – aroth
@Grzegorz, las interfaces no pueden tener miembros privados. –