Как получить класс, который может быть создан только другим спецификатором c class - PullRequest
0 голосов
/ 12 июля 2020

Я хочу иметь класс, который может быть создан только другим классом. Я знаю, что должен сделать constructor закрытым, иначе каждый сможет его создать.

class Root private constructor() {
}

class RootMaker: Application() {
    fun createRoot() = Root()
} // but this doesn't work because Root's constructor is private

один обходной путь - сделать класс maker внутренним классом класса Root.

class Root private constructor() {

    class RootMaker: Application() {
        fun createRoot() = Root()
    } 
}

, но я действительно не хочу этого делать, потому что класс производителя - это мой application класс в android. так что лучше?

1 Ответ

1 голос
/ 12 июля 2020

Если вам нужен только один экземпляр объекта, вы можете использовать ключевое слово object в Kotlin. Он реализует шаблон Singleton:

class App : Application {
    
    val root = Root

}

object Root {
    fun createObject(): Any {}
}

Теперь мы можем получить доступ к одному экземпляру класса Root либо через свойство в классе App, либо через Root class: Root.createObject()

ОБНОВЛЕНИЕ:

Чтобы реализовать синглтон, к которому имеет доступ только один конкретный c класс, мы можем использовать интерфейс и скрыть его реализацию в этом c классе ( создатель класс):

interface IRoot {
    // ... methods of creation different objects for dependency injection
}

class App : Application {

    val root: IRoot = Root

    // hide implementation of `IRoot` interface in `App` class
    private object Root : IRoot {

        // ... implementation of methods of creation different objects for dependency injection
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...