内部工厂 class,不可能吗?
Factory in inner class, not possible?
我想对外部 class 隐藏内部 class 的实例化细节。
我的内部 class 需要是非静态的才能访问外部的变量
如果我尝试编写一个 buildNew() 静态方法,它会抛出一个错误,因为似乎不可能在内部 classes.
中使用静态方法
我是否必须放弃该功能并实例化父变量中的内部 class 或将所有父变量传递给内部变量才能获得静态资格?
我认为您概述的两个选项(使内部静态化或将这些工厂方法放在外部)都很好,您不会通过以下方式获得太多收益,但这是一个见仁见智的问题。
您可以复制静态方法和变量的功能,方法是使用单例(相对于 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;
}
}
}
我想对外部 class 隐藏内部 class 的实例化细节。 我的内部 class 需要是非静态的才能访问外部的变量
如果我尝试编写一个 buildNew() 静态方法,它会抛出一个错误,因为似乎不可能在内部 classes.
中使用静态方法我是否必须放弃该功能并实例化父变量中的内部 class 或将所有父变量传递给内部变量才能获得静态资格?
我认为您概述的两个选项(使内部静态化或将这些工厂方法放在外部)都很好,您不会通过以下方式获得太多收益,但这是一个见仁见智的问题。
您可以复制静态方法和变量的功能,方法是使用单例(相对于 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;
}
}
}