我遇到了以下将 Room-database 实现为单例的示例代码:
public abstract class StudentDatabase extends RoomDatabase {
public abstract StudentDao studentDao();
private static StudentDatabase instance;
public static StudentDatabase getInstance(final Context context) {
if (instance == null) {
synchronized (StudentDatabase .class) {
if (instance == null) {
instance = Room.databaseBuilder(
context.getApplicationContext(),
StudentDatabase .class,
"student_data.db"
).build();
}
}
}
return instance;
}
就个人而言,我会使用:
public abstract class StudentDatabase extends RoomDatabase {
public abstract StudentDao studentDao();
private static StudentDatabase instance;
private StudentDatabase() {};
public static synchronized StudentDatabase getInstance (final Context context) {
if (instance == null) {
instance = Room.databaseBuilder(
context.getApplicationContext(),
StudentDatabase .class,
"student_data.db"
).build();
}
instance;
}
}
有人可以向我解释这两种实现是否存在实质性差异吗?
顺便说一下,第一个示例中没有使用私有构造函数。我真的不知道为什么,我一直认为我们必须在单例中使用它。除此之外,我不明白为什么我们需要第二个if (instance == null)
。