为什么抽象类可以成为 Kotlin 中的实例?

Hel*_*oCW 1 kotlin

以下代码来自项目https://github.com/android/sunflower

在我看来,抽象类不能被实例化,AppDatabase代码A中是抽象类。

为什么代码B可以实例化抽象类AppDatabase

代码A

...
abstract class AppDatabase : RoomDatabase() {
    abstract fun gardenPlantingDao(): GardenPlantingDao
    abstract fun plantDao(): PlantDao

    companion object {

        // For Singleton instantiation
        @Volatile private var instance: AppDatabase? = null

        fun getInstance(context: Context): AppDatabase {
            return instance ?: synchronized(this) {
                instance ?: buildDatabase(context).also { instance = it }
            }
        }

    ...
}
Run Code Online (Sandbox Code Playgroud)

代码B

fun provideAppDatabase(@ApplicationContext context: Context): AppDatabase {
     return AppDatabase.getInstance(context)
}
Run Code Online (Sandbox Code Playgroud)

Dim*_*ira 5

您无法创建抽象类的实例。

表达式buildDatabase(context)实际上返回继承自 的类的实例AppDatabase

我想,这个类是由注释处理器在构建时生成的。