Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这些是什么类型的java构造函数?构造函数链接?_Java_Spring_Constructor_Constructor Chaining - Fatal编程技术网

这些是什么类型的java构造函数?构造函数链接?

这些是什么类型的java构造函数?构造函数链接?,java,spring,constructor,constructor-chaining,Java,Spring,Constructor,Constructor Chaining,这些来自github上的spring amqp示例 这些是什么类型的java构造函数?他们是得分手和二传手的简称吗 public class Quote { public Quote() { this(null, null); } public Quote(Stock stock, String price) { this(stock, price, new Date().getTime()); } 与此相反 public c

这些来自github上的spring amqp示例 这些是什么类型的java构造函数?他们是得分手和二传手的简称吗

public class Quote {

    public Quote() {
        this(null, null);
    }

    public Quote(Stock stock, String price) {
        this(stock, price, new Date().getTime());
    }
与此相反

public class Bicycle {

public Bicycle(int startCadence, int startSpeed, int startGear) {
    gear = startGear;
    cadence = startCadence;
    speed = startSpeed;
}

这些构造函数被重载,以便使用此。。。。第一个无参数构造函数使用空参数调用第二个构造函数。第二个调用未显示的第三个构造函数,该构造函数必须包含Stock、String和long。这种模式称为构造函数链接,通常用于提供多种实例化对象的方法,而无需重复代码。参数较少的构造函数使用默认值(如new Date.getTime)填充缺少的参数,否则只传递null

请注意,必须至少有一个构造函数不调用此…,而是提供对超级。。。然后是构造函数实现。当这两者都不是。。。也不是超级。。。如果在构造函数的第一行指定,则暗示对super的no-arg调用

因此,假设Quote类中没有更多的构造函数链接,第三个构造函数可能如下所示:

public Quote(Stock stock, String price, long timeInMillis) {
    //implied call to super() - the default constructor of the Object class

    //constructor implementation
    this.stock = stock;
    this.price = price;
    this.timeInMillis = timeInMillis;
}
还请注意,调用此。。。尽管这与链接模式不同,但仍然可以通过实施来实现:

public Quote(Stock stock, String price) {
    this(stock, price, new Date().getTime());

    anotherField = extraCalculation(stock);
}

这些构造函数被重载,以便使用此。。。。第一个无参数构造函数使用空参数调用第二个构造函数。第二个调用未显示的第三个构造函数,该构造函数必须包含Stock、String和long。这种模式称为构造函数链接,通常用于提供多种实例化对象的方法,而无需重复代码。参数较少的构造函数使用默认值(如new Date.getTime)填充缺少的参数,否则只传递null

请注意,必须至少有一个构造函数不调用此…,而是提供对超级。。。然后是构造函数实现。当这两者都不是。。。也不是超级。。。如果在构造函数的第一行指定,则暗示对super的no-arg调用

因此,假设Quote类中没有更多的构造函数链接,第三个构造函数可能如下所示:

public Quote(Stock stock, String price, long timeInMillis) {
    //implied call to super() - the default constructor of the Object class

    //constructor implementation
    this.stock = stock;
    this.price = price;
    this.timeInMillis = timeInMillis;
}
还请注意,调用此。。。尽管这与链接模式不同,但仍然可以通过实施来实现:

public Quote(Stock stock, String price) {
    this(stock, price, new Date().getTime());

    anotherField = extraCalculation(stock);
}

这就是我们所说的伸缩模式。但是在Quote类中使用的方法没有用处。例如,假设在类中有一个必需属性和两个可选属性。在这种情况下,您需要提供一个具有该必需属性的构造函数,然后在该构造函数中,您需要使用可选参数的默认值调用其他构造函数

// Telescoping constructor pattern - does not scale well!
public class NutritionFacts {
private final int servingSize; // (mL)  required
private final int servings; // (per container) required
private final int calories; //  optional
private final int fat; // (g) optional
private final int sodium; // (mg) optional
private final int carbohydrate; // (g)   optional
public NutritionFacts(int servingSize, int servings) {
this(servingSize, servings, 0);
}
public NutritionFacts(int servingSize, int servings,
int calories) {
this(servingSize, servings, calories, 0);
}
public NutritionFacts(int servingSize, int servings,
int calories, int fat) {
this(servingSize, servings, calories, fat, 0);
}

我从有效的java edition 2中提取了这段java代码。

这就是我们所称的伸缩模式。但是在Quote类中使用的方法没有用处。例如,假设在类中有一个必需属性和两个可选属性。在这种情况下,您需要提供一个具有该必需属性的构造函数,然后在该构造函数中,您需要使用可选参数的默认值调用其他构造函数

// Telescoping constructor pattern - does not scale well!
public class NutritionFacts {
private final int servingSize; // (mL)  required
private final int servings; // (per container) required
private final int calories; //  optional
private final int fat; // (g) optional
private final int sodium; // (mg) optional
private final int carbohydrate; // (g)   optional
public NutritionFacts(int servingSize, int servings) {
this(servingSize, servings, 0);
}
public NutritionFacts(int servingSize, int servings,
int calories) {
this(servingSize, servings, calories, 0);
}
public NutritionFacts(int servingSize, int servings,
int calories, int fat) {
this(servingSize, servings, calories, fat, 0);
}

我从有效的java edition 2中提取了这段java代码。

它调用了一个接受整数参数的构造函数

这是我在Java教程网页上找到的:

您可以使用以下方法从实例方法或构造函数中引用当前对象的任何成员

在本例中,它调用ArrayList类中的某些内容。这也在Java教程部分:

在构造函数中,还可以使用this关键字调用同一类中的另一个构造函数。这样做称为显式构造函数调用

因此,在本例中,您看到的是显式构造函数调用


来源:

它正在调用一个接受整数参数的构造函数

这是我在Java教程网页上找到的:

您可以使用以下方法从实例方法或构造函数中引用当前对象的任何成员

在本例中,它调用ArrayList类中的某些内容。这也在Java教程部分:

在构造函数中,还可以使用this关键字调用同一类中的另一个构造函数。这样做称为显式构造函数调用

因此,在本例中,您看到的是显式构造函数调用


来源:

@Paul Bellora-希望你不介意我在问题中添加了你的描述,以使问题更清楚context@Paul贝洛拉-希望你不介意我在问题中添加了你的描述,以便更清楚地说明问题的背景