gpt4 book ai didi

Android Room数据库是单例的。为什么没有私有(private)构造函数?

转载 作者:行者123 更新时间:2023-12-03 08:46:06 24 4
gpt4 key购买 nike

下面是我的 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)构造函数时

private AppDatabase(){}

此错误显示

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

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

最佳答案

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

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

protected AppDatabase(){}

关于Android Room数据库是单例的。为什么没有私有(private)构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61424751/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com