programing

코틀린의 개인 건설업자

procenter 2022. 12. 9. 22:17
반응형

코틀린의 개인 건설업자

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인터페이스와 aprivate실장?생성자 만들기private클래스 외부에서 액세스 할 수 없게 됩니다.같은 파일에서도 액세스 할 수 없습니다.

프라이빗 컨스트럭터가 있는 동안 퍼블릭컨스트럭터의 사용을 「에뮬레이트」하는 것과 같은 조작을 실시할 수도 있습니다.

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

이는 Companion 개체를 사용하여 수행할 수 있습니다.

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

            return Foo(someData)
        }
    }

    // ...
}

컴패니언 오브젝트 내의 메서드는 주변 클래스의 멤버인 경우와 동일하게 도달할 수 있습니다(예:Foo.constructorA())

다음 Kotlin 문서를 참조하십시오.

https://kotlinlang.org/docs/reference/classes.html#constructors

https://kotlinlang.org/docs/reference/visibility-modifiers.html#constructors

class DontCreateMe private constructor () { /*...*/ }
This is the Answer

class Hide private constructor(val someData: Data) {

}

By declaring the constructor private, we can hiding constructor.

언급URL : https://stackoverflow.com/questions/46847734/private-constructor-in-kotlin

반응형