2014-10-28 2 views
0

여러 생성자를 호출하고 하나의 객체 값을 초기화 할 수 있는지 궁금합니다. 나는 이것에 대한 해답을 찾고 있었지만 나는 그것을 발견하지 못했다. 몇 가지 코드를 보여 주시고 도움을 요청하십시오.하나의 객체를 초기화하는 여러 생성자

int MAX_VALUE; // Field variable 
    boolean[] elements = new boolean[10000]; // Field variable 

    public IntegerSet(int maxValue) { 
     this.MAX_VALUE = maxValue; 
    } 
    public IntegerSet(boolean[] tmp) { 
     int i = 0; 

     for(i = 0; i < tmp.length; ++i) 
      this.elements[i] = tmp[i]; 

     this.elements = Arrays.copyOf(this.elements, tmp.length); 
    } 

/*In main:*/ 

    // I just want to have one object, s1, and I want to be able 
    // to access MAX_VALUE and elements by s1.MAX_VALUE and s1.elements 
    IntegerSet s1 = new IntegerSet(50); 
    /* SOMETHING that uses second constructor with object s1*/ 
+1

에 해당 'this (args)' – Kon

+0

세터를 쓰지 않는 이유는 무엇입니까? – aa333

+0

예, constructor2에서 constructor2를 호출하면 constructor2의 인수가 constructor1에 인수로 전달되어야합니다. 그리고 나는 그것을하고 싶지 않습니다. –

답변

2

클래스의 인스턴스 하나를 만들려면 여러 생성자를 호출 할 수 없습니다. 각각의 호출은 완전히 다른 인스턴스를 생성합니다. int 필드와 생성자를 사용하여 배열을 모두 설정하려면 값이 생성자 자체에 전달해야합니다

public IntegerSet(boolean[] tmp, int maxValue) { 
    this.MAX_VALUE = maxValue; 
    int i = 0; 

    for(i = 0; i < tmp.length; ++i) 
     this.elements[i] = tmp[i]; 

    this.elements = Arrays.copyOf(this.elements, tmp.length); 
} 

이 당신은 호출하여 다른 생성자 내에서 생성자를 호출 할 수 있습니다

public IntegerSet(boolean[] tmp, int maxValue) { 
    this(maxValue); // will call the constructor that takes one parameter 
    int i = 0; 

    for(i = 0; i < tmp.length; ++i) 
     this.elements[i] = tmp[i]; 

    this.elements = Arrays.copyOf(this.elements, tmp.length); 
} 
+0

네, 그렇습니다. 분명히 동의합니다. 분명히 명시되어 있지만 1이 아닌 2 개의 생성자를 사용해야합니다. –

+0

@Sandkar 클래스의 두 생성자를 사용하여 단일 인스턴스를 만드는 유일한 방법은 한 생성자가 다른 생성자를 호출합니다. 하지만 여전히 첫 번째 생성자에 대해 두 개의 매개 변수가 필요합니다. – manouti

관련 문제