Мне нравится скрывать детали моего внутреннего класса от моего внешнего класса. Мой внутренний класс должен быть нестационарным для доступа к внешним переменным
Если я попытаюсь написать статический метод buildNew(), он выдает ошибку, поскольку, по-видимому, не возможно иметь статические методы во внутренних классах.
Должен ли я пересказывать эту функцию и создавать экземпляр внутреннего класса в родительском объекте или передать все родительские переменные во внутреннюю, чтобы получить право на статичность?
Я думаю, что два варианта, которые вы наметили (сделайте Inner static или поместите эти заводские методы в Outer), прекрасны, и вы не получите многого, перейдя со следующим, но это вопрос мнения.
Вы можете реплицировать функцию статических методов и переменных с помощью объекта singleton (по отношению к объекту Outer) для их хранения. В этом случае это выглядит примерно так:
class Outer {
int foo = 0;
int bar = 5;
private final InnerFactory innerFactory = new InnerFactory();
List<Inner> test() {
Inner fromFoo = innerFactory.newFromFoo();
Inner fromBar = innerFactory.newFromBar();
return Arrays.asList(fromFoo, fromBar);
}
private class InnerFactory {
Inner newFromFoo() {
// I'm an inner class, so I can access member variables
// of enclosing Outer
return new Inner(foo);
}
Inner newFromBar() {
return new Inner(bar);
}
}
public class Inner {
int baz;
Inner(int baz) {
this.baz = baz;
}
}
}