1. ホーム
  2. java

[解決済み] Kotlinのプライベートコンストラクタ

2023-07-15 14:39:02

質問

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;
    }

    // ...
}

Kotlinでクラスを分離することなく、同じことを実現するにはどうしたらよいでしょうか。 public インターフェースと private の実装は?コンストラクタを作る private にすると、クラスの外からアクセスできなくなり、同じファイルからでさえもアクセスできなくなります。

どのように解決するのですか?

privateコンストラクタを持ちながらpublicコンストラクタの使い方をquot;emulating" するようなこともできます。

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