Я заметил следующий шаблон кода при просмотре некоторых источников сторонних библиотек проекта:
public interface MyInterface {
public static class MyClass1 implements MyInterface { ... }
public static class MyClass2 implements MyInterface { ... }
public static class MyClass3 implements MyInterface { ... }
}
Или этот:
public class MyBaseClass {
public static class MyClass1 extends MyBaseClass { ... }
public static class MyClass2 extends MyBaseClass { ... }
public static class MyClass3 extends MyBaseClass { ... }
}
Примеры реальной жизни:
- SwingX:
org.jdesktop.swingx.decorator.HighlightPredicate
(Источник) - Вещество:
org.pushingpixels.substance.api.renderers.SubstanceDefaultTableCellRenderer
(Источник)
В чем преимущество наличия такой структуры кода?
Моя первая мысль была "агрегация", но то же самое можно было сделать, используя простые старые пакеты. Итак, когда/почему лучше использовать общедоступные внутренние классы вместо пакета?