为什么在实例化一个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()
返回的是一个预先存在的对象。
我在学习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()
返回的是一个预先存在的对象。