2016-11-11 1 views
0

두 개의 생성자 (하나는 인수가 있고 하나는 인수가없는 클래스)가 있어야합니다. without은 무작위 화 된 인자를 가진 다른 것을 호출하기로되어있다. 여기 인수로 생성자를 호출하는 생성자

은 몇 가지 예제 코드입니다 :

public Human(int ageIn, String nameIn){ 
    this.name = nameIn; 
    this.age = ageIn; 
} 

public Human(){ 
    String[] names = {"Peter", "Olof", "Alva", "Sanna", "Carl", "Illona"}; 
    double random = Math.random(); 
    int nameIndex = (int)(names.length*random+0.5); 
    String name = names[nameIndex]; 

    random = Math.random(); 
    int age = (int)(100*random+0.5); 

    this(age, name); 
} 

이 하드를 만드는 것은 this() 생성자의 시작 부분에 있어야하는 것입니다,하지만 난 정의하고 내가 할 수있는 전에 nameage을 파악해야 그들과 함께 첫 번째 생성자를 호출하십시오.

이 문제가 발생합니까? 고맙습니다!

+6

더 좋은 방법이 있는지 모르겠지만 각 임의의 매개 변수에 대해 정적 메서드를 만들고 'this (getRandomAge(), getRandomName())'를 호출 할 수 있습니다. – AJPerez

+1

네, 이것을 시도하고 정적 키워드는 초기화되지 않은 클래스에 대해 불평하고 있었기 때문에 누락 된 키워드입니다. 고맙습니다! 답변을 올리면 받아 들일 것입니다. –

답변

2

이러한 임의 값을 만드는 정적 메서드를 만들 수 있습니다. 그런 다음 생성자의 1 번 줄에서 다음을 호출 할 수 있습니다.

public Human(){ 
    this(getRandomAge(), getRandomName()); 
} 
+0

방금 ​​전에 @ajperez가 같은 것을 말한 것을 보았습니다. 그건 바로 대답 :) –

0

어때?

public class Human { 

    public Human() { 
     this(null, -1); 
    } 

    public Human(String name, int age) { 
     if(name == null) { 
      name = //your random name generation code 
     } 

     if(age == -1) { 
      age = //your random age generation code 
     } 

     this.name = name; 
     this.age = age; 
    } 
} 
+0

* "없는 사람은 무작위 화 된 인수로 다른 사람을 부르기로되어있다."* ... – Tom

+1

@ 톰 실제로, 나는 완전히 그 것을 놓쳤습니다. 그러나 그것은 매우 이상한 스펙처럼 들리므로, 새로운 제안이 그것을 만족시키는 지 여부를 정말로 결정할 수는 없습니다. – rorschach

0

우려 사항을 섞어서는 안됩니다. Human은 미리 정의 된 이름 집합을 기반으로 임의의 이름을 선택하거나 임의의 연령을 계산할 필요가 없습니다.

차라리 (당신의 이름과 나이에 대해 하나 개의 정의 된 값을 가지고 있지만, 당신의 사건이 아니다 보인다 경우 제외) 인수 없음의 생성자를 삭제하고 HumanFactory에서 일반적으로 Human의 외부에서이 논리를 추출하는 것 .

0

은 또한 당신은 factory methodHuman는 '임의'를 만들 만들 수 있습니다

public class MyProgram { 

    public static void main(String[] args) { 

     Human someRandomStranger = Human.createRandomHuman(); 
     //... 
    } 

} 

public class Human { 

    public Human(int ageIn, String nameIn){ 
     this.name = nameIn; 
     this.age = ageIn; 
    } 

    // ... 

    public static Human createRandomHuman(){ 
     String[] names = {"Peter", "Olof", "Alva", "Sanna", "Carl", "Illona"}; 
     double random = Math.random(); 
     int nameIndex = (int)(names.length*random+0.5); 
     String name = names[nameIndex]; 

     random = Math.random(); 
     int age = (int)(100*random+0.5); 

     return new Human(age, name); 
    } 

} 

이 처음부터 존재하지 않아야 물건 분명 당신의 생성자를 유지하는 것입니다. 값을 임의로 필드에 할당하는 기본 생성자가 실수로 코드에서 호출되어 원하지 않는 결과를 생성 할 수 있습니다.

반면에 올바르게 명명 된 공장 방법은 그러한 실수를 방지하고 명확하게 의사를 전달하는 데 도움이됩니다.

관련 문제