Android Room数据库是一个单例。为什么没有私有构造函数?

问题描述 投票:0回答:1

下面是我的AppDatabase类。这是单身人士

    import androidx.room.Database;
import androidx.room.Room;
import androidx.room.RoomDatabase;
import androidx.room.TypeConverters;

@Database(entities = {NoteEntity.class}, version =1,exportSchema = false)
@TypeConverters(DateConverter.class)
public abstract class AppDatabase extends RoomDatabase {
    private static AppDatabase instance;
//android will automatically generate code for this abstract method. so we dont need to implement this
    public abstract NoteDao noteDao();

    public static synchronized AppDatabase getInstance(Context context){
        if(instance==null){
            instance= Room.databaseBuilder(context.getApplicationContext(),AppDatabase.class, "AppDatabase.db").build();
        }
        return instance;

    }
}

以上代码可以正常工作。但是当我包括私有构造函数

private AppDatabase(){}

此错误显示

错误:AppDatabase()在AppDatabase中具有私有访问权限公共最终类AppDatabase_Impl扩展了AppDatabase {

我的问题是,如果这是单例模式,为什么我不能包含私有构造函数

android singleton
1个回答
0
投票

这是因为Room为您提供私有构造函数时无法实现您的AppDatabase类(AppDatabase_Impl)。 AppDatabase_Impl需要能够调用超级构造函数。

您可以将构造函数的访问修饰符更改为protected:

protected AppDatabase(){}
© www.soinside.com 2019 - 2024. All rights reserved.