복붙노트

[SPRING] 어떤 유형의 자바 생성자가 이것입니까? 생성자 연결?

SPRING

어떤 유형의 자바 생성자가 이것입니까? 생성자 연결?

이것들은 github의 spring amqp 샘플에서 온 것입니다. https://github.com/SpringSource/spring-amqp-samples.git 어떤 유형의 자바 생성자가 이것입니까? getters와 setter를위한 짧은 손입니까?

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;
}

해결법

  1. ==============================

    1.이러한 생성자는 this (...)를 사용하여 다른 생성자를 호출하도록 오버로드됩니다. 첫 번째 인수 없음 생성자는 두 번째 인수를 null 인수로 호출합니다. 두 번째는 Stock, String 및 long을 취해야하는 세 번째 생성자 (표시되지 않음)를 호출합니다. 생성자 체인이라고하는이 패턴은 종종 중복 코드없이 객체를 인스턴스화하는 여러 가지 방법을 제공하는 데 사용됩니다. 인수가 적은 생성자는 누락 된 인수를 new Date (). getTime ()과 같은 기본값으로 채우거나 그렇지 않으면 null 만 전달합니다.

    이러한 생성자는 this (...)를 사용하여 다른 생성자를 호출하도록 오버로드됩니다. 첫 번째 인수 없음 생성자는 두 번째 인수를 null 인수로 호출합니다. 두 번째는 Stock, String 및 long을 취해야하는 세 번째 생성자 (표시되지 않음)를 호출합니다. 생성자 체인이라고하는이 패턴은 종종 중복 코드없이 객체를 인스턴스화하는 여러 가지 방법을 제공하는 데 사용됩니다. 인수가 적은 생성자는 누락 된 인수를 new Date (). getTime ()과 같은 기본값으로 채우거나 그렇지 않으면 null 만 전달합니다.

    이 (...)를 호출하지 않는 생성자가 적어도 하나 있어야하며 대신 super (...)에 이어 생성자 구현이 호출됩니다. 생성자의 첫 번째 행에 this (...)와 super (...)가 지정되어 있지 않으면 super ()를 호출하는 인수가 함축되어 있지 않습니다.

    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;
    }
    

    또한 this (...)에 대한 호출은 연쇄 패턴에서 벗어나지 만 여전히 구현이 이어질 수 있습니다.

    public Quote(Stock stock, String price) {
        this(stock, price, new Date().getTime());
    
        anotherField = extraCalculation(stock);
    }
    
  2. ==============================

    2.이것이 우리가 텔레 스코핑 패턴이라고 부르는 것입니다. 그러나 Quote 클래스에서 사용한 방법은 유용하지 않습니다. 예를 들어 클래스에 하나의 필수 속성과 두 개의 선택적 속성이 있다고 생각하십시오. 이 경우 필요한 속성으로 생성자를 제공해야하며 해당 생성자 내에서 선택적 매개 변수의 기본값을 사용하여 다른 생성자를 호출해야합니다.

    이것이 우리가 텔레 스코핑 패턴이라고 부르는 것입니다. 그러나 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);
    }
    

    나는 효과적인 자바 에디션 2에서이 자바 코드를 추출한다.

  3. ==============================

    3.그것은 정수 인수를 취하는 생성자를 호출합니다.

    그것은 정수 인수를 취하는 생성자를 호출합니다.

    이것은 자바 튜토리얼 웹 페이지에서 찾은 것입니다.

    이 경우 ArrayList 클래스에서 무언가를 호출합니다. 이것은 Java Tutorials 섹션에도 있습니다.

    그래서 당신의 경우는 명시 적 생성자 호출입니다.

    출처 : https://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html

  4. from https://stackoverflow.com/questions/9204560/what-type-of-java-constructors-are-these-constructor-chaining by cc-by-sa and MIT license