为什么在实例化一个class这个例子中没有"new"关键字?

Why is there no "new" keyword in this example of instantiating a class?

我在学习Java。要实例化一个 class 我们使用 new 关键字,但我不明白这行代码是什么意思。为什么这里没有 new 关键字?

AppDatabase db = Room.databaseBuilder(getApplicationContext(),
                                      AppDatabase.class,
                                      "database_transaction").build();

你问的是这个:

AppDatabase db = Room.databaseBuilder(getApplicationContext(),
                                      ppDatabase.class,
                                      "database_transaction").build();

这是对方法的调用(Room class 上的静态方法 databaseBuilder),然后是对对象上的 build() 方法的第二次调用由第一次调用返回。然后第二个调用返回一个 AppDatabase 对象。

在其中一个方法中的某处,我期望 new 被用于显式创建一个新对象1 .

这看起来像是称为 Factory Method pattern where the logic of creating objects is encapsulated in a static method or an instance method. More specifically, this looks like the Builder 模式的一般模式的示例。

值得阅读这两个链接以了解这些模式的优点和缺点。它们还可以与 Fluent Interface API 设计模式相结合,以减少参数数量 and/or 方法重载。


1 - 我可能是错的。可以用其他方式创建对象;例如通过装箱、反序列化对象序列化流或使用 Unsafe 或本机代码方法。方法的名称也可能具有误导性,build() 返回的是一个预先存在的对象。