[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.이러한 생성자는 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.이것이 우리가 텔레 스코핑 패턴이라고 부르는 것입니다. 그러나 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.그것은 정수 인수를 취하는 생성자를 호출합니다.
그것은 정수 인수를 취하는 생성자를 호출합니다.
이것은 자바 튜토리얼 웹 페이지에서 찾은 것입니다.
이 경우 ArrayList 클래스에서 무언가를 호출합니다. 이것은 Java Tutorials 섹션에도 있습니다.
그래서 당신의 경우는 명시 적 생성자 호출입니다.
출처 : https://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html
from https://stackoverflow.com/questions/9204560/what-type-of-java-constructors-are-these-constructor-chaining by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 프레임 워크에서 순환 참조를 사용하려면 어떻게해야합니까? (0) | 2019.02.16 |
---|---|
[SPRING] Docker Swarm 및 Kubernetes와 같은 Spring Cloud와 Orchestration 도구의 결합 (0) | 2019.02.16 |
[SPRING] oauth2 OAuth2AccessToken 요청에 대한 프록시 설정 방법 또는 OAuth2AccessTokenSupport restTemplate 변수를 재정의하는 방법? (0) | 2019.02.16 |
[SPRING] UserDetails의 사용자 지정 구현 예제 (0) | 2019.02.16 |
[SPRING] 싱글 사인온 + 봄 [마감] (0) | 2019.02.16 |