我想要一个只能由另一个类实例化的类。我知道我必须将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()
}
}
但是我真的不想这样做,因为maker类是我在android中的application
类。那有什么更好的方法呢?
答案 0 :(得分:1)
如果只需要一个对象的实例,则可以在Kotlin中使用object
关键字。它实现了Singleton
模式:
class App : Application {
val root = Root
}
object Root {
fun createObject(): Any {}
}
现在,我们可以通过Root
类中的属性或通过App
类来访问Root
类的一个实例:Root.createObject()
更新:
要实现只有一个特定类可以访问的单例,我们可以使用接口并将其实现隐藏在该特定类( maker 类)中:
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
}
}