Kotlin – заводская функция для класса с частным конструктором

В Kotlin возможно ли иметь фабричную функцию, которая создает экземпляр класса с частным конструктором?

Моя цель – обеспечить использование фабричной функции, которая будет использоваться, и предотвратить создание экземпляра через конструктор класса.

Пример:

// factory function, valid val myInstance = myClassOf() // class instantiation, invalid val myInstance = MyClass() 

Я пытаюсь имитировать поведение некоторых встроенных функций фабрики, таких как intArrayOf() , например

 // works val myIntArray = intArrayOf() // not possible as IntArray has a private constructor val myIntArray = IntArray() 

Вы можете сделать что-то вроде этого:

 import MyClass.Companion.myClassOf class MyClass private constructor() { companion object { fun myClassOf() = MyClass() } } //val myInstance1 = MyClass() // not allowed val myInstance2 = myClassOf() 

Вы можете использовать объект-компаньон таким образом:

 class MyClass private constructor() { companion object { operator fun invoke() = MyClass() } } val myInstance = MyClass() // Calls the factory function invoke() 

Назовите фабричную функцию, если она имеет особое значение. Например:

 class MyClass private constructor(values: List<String>) { companion object { fun of(vararg values: String) = MyClass(values.toList()) } } val myInstance = MyClass.of("first", "second")