为什么指定一个方法两次 - Java

Why specify a method twice - Java

我是一名 python 编码员,但最近开始涉足 Java。我正在尝试理解一段特定的代码,但我 运行 遇到了困难,我认为这些困难与我对 Java 的了解还不够了解有关。

让我印象深刻的是,有时在 class 中定义方法会被调用两次。我想知道这是为什么?例如:

以下代码取自名为 ApplicationCreator.java 的文件。我注意到 public class ApplicationCreator 基本上实例化了两次,或者我在这里遗漏了什么?

public class ApplicationCreator<MR> implements
    IResourceObjectCreator<BinaryRuleSet<MR>> {

private String  type;

public ApplicationCreator() {
    this("rule.application");
}

public ApplicationCreator(String type) {
    this.type = type;
}

所以我的问题是:

1) 为什么 class 会在 class 中实例化自己?

2) 为什么要这样做两次?或者这是将 ApplicationCreator class 的某些参数设置为新值的方法吗?

如有任何建议,我们将不胜感激。

它没有在 class 中实例化自己,而是在 class 中调用不同的构造函数。

这些是重载的构造函数。构造函数有点像方法,但它们在对象创建时被调用。考虑一下:

public class Example {
    private int instanceVariable;

    public Example() { //a constructor of Example
        instanceVariable = 3;
        System.out.println("New Example object was created!");
    }

    public static void main(String[] args) {
        Example ex = new Example();
    }
}

在这里,我们有一个 Example class,它有一个构造函数。如果您查看 main 方法,我们会创建一个新的 Example 实例。该程序将输出 New Example object was created! 并将实例的 instanceVariable 设置为 3,因为在构造对象 时会立即调用构造函数,因为它会构造对象 (因此得名)。

现在,如果您看一下您的情况,构造函数有不同的参数(因此有不同的签名),因此可以通过不提供参数或提供字符串来构造对象。让我来说明这是做什么的:

public ApplicationCreator() {
    this("rule.application");
}
在这种情况下,

this 指的是 class,调用 this(args) 会调用 class 的构造函数。由于我们重载了构造函数,Java 将调用与传递的参数最匹配的构造函数。因为在这种情况下,传递了一个字符串,Java 将看到构造函数 public ApplicationCreator(String) 是最匹配的构造函数并将调用它。

在无参数构造函数中,它调用另一个带有字符串的构造函数rule.application,因此您可以将无参数构造函数视为将默认值传递给接受字符串的构造函数。

class 确实没有实例化自己两次。相反,默认构造函数 ApplicationCreator()(即不带参数的构造函数)只是调用接受输入字符串的构造函数。

这可确保 ApplicationCreator 对象始终具有类型。如果未指定类型,将使用默认值 rule.application

这是重载构造函数的示例。

它被称为构造函数。而且它不是 "called twice",一个只是使用给定参数通过 this() 重定向到另一个。

基本上是第一种方式,没有参数,只有一个默认值。否则,您将使用给定的 String type

构造一个实例

1) 为什么 class 会在 class 中实例化自己?

The class is not calling itself, it is proving a way for others to instantiate its object. Read about constructor.

2) 为什么要这样做两次?或者这是将 ApplicationCreator class 的某些参数设置为新值的方法吗?

As I said, it is a way to create object. 1st one will assign default value to type. And 2nd will give others an option to assign a value. Read about constructor overloading.

构造函数中的

this 将根据传递给 this.

的参数类型调用相同 class 的另一个构造函数

这是两个不同的构造函数。
它们具有所谓的“不同签名”。

使用它,您可以用两种不同的方式构造一个 ApplicationCreator 对象:

ApplicationCreator ac = new ApplicationCreator();

ApplicationCreator ac = new ApplicationCreator("A String");

如需进一步阅读,请参阅:The Java Class Constructor

这里 class 有两个构造函数。
当class name "method" name 相同时你可以理解那些是构造函数。
此处构造函数过载。基于参数classes将被实例化。这里用户可以根据需要进行选择。