java - Kotlin 中的私有(private)构造函数

在 Java 中,可以隐藏类的主构造函数,方法是将其设为 private,然后通过其中的 public static 方法访问它类:

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 接口(interface)和 private 实现的情况下,如何使用 Kotlin 达到相同的效果?将构造函数设为 private 会导致无法从类外部访问它,甚至无法从同一个文件访问。

最佳答案

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

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

https://stackoverflow.com/questions/46847734/

相关文章:

kotlin - 如何使用 toString 扩展数据类

class - 我无法从 Kotlin 的嵌套类中联系到任何类成员

gradle - 为什么更新 Gradle 到 3.1.0 后显示 "3rd-party Gradl

kotlin - 如果可空类型为空,我如何运行代码块?

generics - Scala 2.10 中的具体泛型

kotlin - 如何获取给定密封类的所有子类?

android - 带有 Kotlin 的 Android 中的 HTTP 请求

kotlin - Kotlin 中 with 和 run 的区别

android - IllegalArgumentException : savedInstance

android - Kotlin : safe lambdas (no memory leak)?