小编典典

为什么不使用new关键字就可以实例化Toast?

java

因此,对于Toast类,显然可以这样编写:

Toast toastMessage = Toast.makeText(this, "Hello", Toast.LENGTH_SHORT)
toastMessage.show();

为什么完全可以实例化toastMessage并将其用作没有new关键字的对象?

如何通过方法实例化toastMessage?


阅读 317

收藏
2020-11-30

共1个答案

小编典典

这里没有什么特别的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)

…那里不能有三个重载的构造函数,但是可以给 方法指定 不同的名称。

2020-11-30