Kotlin 中的私有构造函数

新手上路,请多包涵

在 Java 中,可以隐藏一个类的主构造函数,方法是使其成为 private 然后通过该类方法内部的 public static 425ce7 访问它:

 public final class Foo {
    /* Public static method */
    public static final Foo constructorA() {
        // do stuff

        return new Foo(someData);
    }

    private final Data someData;

    /* Main constructor */
    private Foo(final Data someData) {
        Objects.requireNonNull(someData);

        this.someData = someData;
    }

    // ...
}

如果不将类分成 public 接口和 private 实现,Kotlin 如何能达到同样的效果?制作构造函数 private 导致它无法从类外部访问,甚至无法从同一个文件访问。

原文由 Marvin 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 742
2 个回答

您甚至可以在拥有私有构造函数的同时做一些更类似于“模拟”公共构造函数的使用的事情。

 class Foo private constructor(val someData: Data) {
    companion object {
        operator fun invoke(): Foo {
            // do stuff

            return Foo(someData)
        }
    }
}

//usage
Foo() //even though it looks like constructor, it is a function call

原文由 rafal 发布,翻译遵循 CC BY-SA 3.0 许可协议

这可以使用伴随对象:

 class Foo private constructor(val someData: Data) {
    companion object {
        fun constructorA(): Foo {
            // do stuff

            return Foo(someData)
        }
    }

    // ...
}

可以访问伴随对象内部的方法,就像它们是周围类的成员一样(例如 Foo.constructorA()

原文由 Marvin 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题