正如标题所示,我希望通过使用类名的反射获得一个单例实例。假设我有一门课:
abstract class MyRoomDatabase : RoomDatabase() {
abstract fun exampleEntityDao() : ExampleEntityDao
companion object {
@Volatile
private var INSTANCE: MyClass? = null
fun getDatabase(context: Context): MyClass {
return INSTANCE ?: synchronized(this) {
val instance = Room.databaseBuilder(context.applicationContext, MyRoomDatabase::class.java, "db").build()
INSTANCE = instance
instance
}
}
}
}
现在,知道类名了吗
val strClass = MyRoomDatabase::class.qualifiedName.toString()
我希望实现:
MyRoomDatabase.getDatabase(this).getExampleEntityDao().doSomeStuff()
我试过这个:
val strClass = MyRoomDatabase::class.qualifiedName.toString()
val classFromStr = Class.forName(strClass)
val companion = classFromStr::class.companionObject
那么,,
companion
是空的。
val companion = MyRoomDatabase::class.companionObject
给我一个实际的伴奏,但我不能这样做,因为在应该这样做的地方,编译器只知道类名。