因此,对于Toast类,显然可以这样编写:
Toast toastMessage = Toast.makeText(this, "Hello", Toast.LENGTH_SHORT) toastMessage.show();
为什么完全可以实例化toastMessage并将其用作没有new关键字的对象?
如何通过方法实例化toastMessage?
这里没有什么特别的Toast。您只是在调用创建实例的静态方法(或者可以重用现有实例- 这是实现细节)。例如,这是您会在各处看到的一种模式Calendar.getInstance()。有时可以改为调用构造函数,有时 只能 通过静态方法创建实例。
Toast
Calendar.getInstance()
除非幕后功夫,否则在实现的 某个地方 很可能会调用构造函数。这是一个简单的例子:
public final class CreateViaMethod { private final String name; private CreateViaMethod(String name) { this.name = name; } public static CreateViaMethod newInstance(String name) { return new CreateViaMethod(name); } }
API设计人员 可能 要这样做的原因有多种。例如,可能有几种具有相同参数类型但名称不同的“创建”方法,例如
public static Duration fromSeconds(int seconds) public static Duration fromMinutes(int minutes) public static Duration fromHours(int hours)
…那里不能有三个重载的构造函数,但是可以给 方法指定 不同的名称。