보통

2014-11-10 4 views
1

자바 생성자의 인수에 대한 요구 사항이 있습니까의 costructor는보통

private int occurence; 
private String content; 
public Word(String content,int occurence) 
{ 
    this.content= content; 
    this.occurence = occurence; 
} 

다음과 같다하지만 직접 속성에 할당 할 수 있지만, 속성 값을 계산하는 데 필요하지 않는 매개 변수를 설정할 수 있습니다?

예를 들어, 클래스라는 calOccurence (문자열의 내용) 기사를 기반으로 선두로부터 계산할 수의 방법이있다. 그래서 저는 이처럼 construtor를 만들 수 있습니까 ??

public Word(String content, Article base) 
{ 
    this.content= content; 
    this.occurence = base.calOccurence(content); 
} 

그리고 무엇 calOccurence 기능 calOccurence (문자열의 콘텐츠, 제 기준)처럼 말씀 클래스에 속하는지?

public Word(String content, Article base) 
{ 
    this.content= content; 
    this.occurence = this.calOccurence(content, base); 
} 

이상하게 보이지만 팀 동료가 위와 같은 코드를 작성합니다. 나는 그것이 합리적인지 궁금하다.

+0

여러분의 ctor 코드는 생성되는'Word' 인스턴스가 아니라'Article'에서'calOccurence'를 호출하려고하는 동료와 분명히 같지 않습니다. 당신의 동료의 ctor에 관한 "이상한"유일한 것은 ctor 매개 변수를 전달하는 대신에 인스턴스의'content' 속성을 사용하지 않는다는 것입니다. 그러나 그것은 본질적으로 이상하지 않습니다. 궁극적으로 원하는 것을 생성자로 전달할 수 있습니다. –

+0

그 예는 합리적입니다. IMO는 : 'calOccurence'는 잠재적으로 값 비싼 작업처럼 보이고,'Word'는 많은 인스턴스를 만들려는 객체처럼 보입니다. 당신이'새로운 단어'를 할 때마다 단어 당 한 번씩 내용을 검사하게 될 것입니다. – bdkosher

답변

1

단어가 기사 없이는 존재할 수 없으므로 Word 클래스에서 발생 필드를 제외하고 기사 클래스에서만 사용하는 것이 가장 좋습니다. 이

public class Word { 
    String text; 
    Article article; 

    public Word(String text, Article article) { 
     this.text = text; 
     this.article = article; 
    } 

    // other code 
} 

public class Article 
    String content; 
    public Article(String content) { 
     this.content = content; 
    } 

    public int calOccurrence(Word word) { 
     // Calculate the occurrence of word.text in this.content 
    } 

    // other code 
} 
0

생성자와 같은

뭔가 항상 결과 객체가 완전히 초기화되고 사용할 준비가되어 있는지 확인해야합니다. 이 작업을 수행하기 위해 클래스 내의 다른 메소드를 호출해도 문제는 없지만 정의되지 않은 상태의 객체로 작업 할 수 있는지 확인해야합니다.

예에서 에 대한 호출이 발생하면 this.content이 설정되기 전에 this.calOccurence 메서드가 여전히 작동해야합니다. 따라서 this.content 변수를 사용하는 대신 콘텐츠 값을 전달해야합니다. 클래스의 속성에 의존하지 않고 인수로 content을 전달하면 항상 필요한 모든 데이터가 유지됩니다.

이제는 발생 횟수가 필요하지 않은 경우이를 게으른 속성으로 바꾸고 필요할 때만 값을 계산하는 것이 더 좋은 전략 일 수 있습니다.