java - 内部类中的工厂,不可能吗?

标签 java class static java-8 inner-classes

我想对外部类隐藏内部类的实例化细节。 我的内部类需要是非静态的才能访问外部的变量

如果我尝试编写一个 buildNew() 静态方法,它会抛出一个错误,因为内部类中似乎不可能有静态方法。

我是否必须放弃该功能并在父类中实例化内部类,或者将所有父类的变量传递给内部类才能获得静态资格?

最佳答案

我认为您概述的两个选项(使内部静态化或将这些工厂方法放在外部)都很好,您不会通过以下方式获得太多 yield ,但这是一个见仁见智的问题。

您可以通过使用单例(相对于 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;
        }
    }

}

关于java - 内部类中的工厂,不可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29267874/

相关文章:

java - 在第一个下拉列表的选择上填写第二个下拉列表

java - 使用 guice 为客户端 sdk/library 设计模式进行依赖注入(inject)

python - 局部变量 'perimeter' 在赋值之前被引用?

c# - 编写公共(public)代码的最佳位置是静态帮助类还是基类?

c++ - 将旧的 C++ 代码从 Solaris 移植到 Linux

java - 在注释中传递方法

java - 如何限制tomcat中的登陆页面?

php - 在 PHP 中跨类共享类实例

c++ - 成员变量不保存从函数成员添加到它的值

java - 单元测试静态方法