Whi*_*cal 5 java static class inner-classes java-8
我想对外部类隐藏内部类的实例化细节。我的内部类需要是非静态的才能访问外部的变量
如果我尝试编写一个 buildNew() 静态方法,它会抛出一个错误,因为在内部类中似乎不可能有静态方法。
我是否必须放弃该功能并实例化父类中的内部类,或者将所有父类的变量传递给内部类以符合静态?
我认为您概述的两个选项(使内部静态或将这些工厂方法放在外部)都很好,并且通过使用以下内容您不会获得太多收益,但这是一个意见问题。
您可以通过使用单例(相对于外部实例)对象来保存静态方法和变量的功能来复制它们。在这种情况下,它看起来像这样:
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;
        }
    }
}
| 归档时间: | 
 | 
| 查看次数: | 2794 次 | 
| 最近记录: |