[英]Android Room database is a singleton.why there is no private constructor?
Below is my AppDatabase class.下面是我的 AppDatabase class。 which is singleton
这是 singleton
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;
}
}
Above code work fine.上面的代码工作正常。 but when i include private constructor
但是当我包含私有构造函数时
private AppDatabase(){}
this error shows这个错误显示
error: AppDatabase() has private access in AppDatabase public final class AppDatabase_Impl extends AppDatabase {错误:AppDatabase() 在 AppDatabase public final class AppDatabase_Impl extends AppDatabase {
My question is if this is singleton pattern why i cant include private constructor我的问题是这是否是 singleton 模式为什么我不能包含私有构造函数
It's because Room cannot implement your AppDatabase class (AppDatabase_Impl) when you give it a private constructor.这是因为当您给它一个私有构造函数时,Room 无法实现您的 AppDatabase class (AppDatabase_Impl)。 AppDatabase_Impl needs to be able to call the super constructor.
AppDatabase_Impl 需要能够调用超级构造函数。
You can change the constructor's access modifier to protected:您可以将构造函数的访问修饰符更改为受保护:
protected AppDatabase(){}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.