我想从我的外部类中隐藏我内部类的实例化细节。我的内部类必须是非静态的,以便访问外部的变量
如果我尝试编写一个buildNew()静态方法,它会引发错误,因为似乎无法在内部类中使用静态方法。
我是否必须重新声明该功能并实例化父级的内部类,或者将所有父级的变量传递给内部才能获得静态资格?
我认为您概述的两个选项(将Inner静态化或将这些工厂方法置于Outer中)很好,并且通过进行以下操作并不会带来太大收益,但这是一个观点。
您可以通过让一个单例对象(相对于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;
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句