0

我遇到了以下将 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)

4

0 回答 0