나는 블랙 잭 게임에서 사용할 Card 클래스를 디자인하고 있었다.모든 불변 클래스가 최종해야합니까?
제 디자인은 J에 대해 11, Q에 대해 12, K에 대해 13을 반환하는 getValue()를 사용하여 Card 클래스를 만든 다음 BlackjackCard 클래스로 확장하여 해당 메서드를 재정 의하여 카드는 10을 반환합니다.
그런 다음 뭔가 잘못되었습니다. Card 클래스의 객체는 불변이어야합니다. 그래서 나는 Effective Java 2nd Edition을 다시 읽음으로써 무엇을해야 하는지를 알게되었고, 불변 클래스가 최종성을 가져야 만 불변성을 깨뜨리는 것을 피할 수 있었다.
나는 또한 인터넷에서 보았고 모두가 그 점에서 동의하는 것으로 보인다.
그럼 카드 클래스가 최종해야합니까? 이 클래스의 불변성을 깰 수있는 방법
은, 그것을 확장 할 수 :
class Card {
private final Rank rank;
private final Suit suit;
public Card(Rank rank, Suit suit) {
this.rank = rank;
this.suit = suit;
}
public Rank getRank() {
return rank;
}
public Suit getSuit() {
return suit;
}
public int getValue() {
return rank.getValue();
}
}
감사합니다.
'MyCard' 클래스가 컴파일되지 않습니다. '계급'과'소송 '에 접근 할 수 없다. –
마지막 문장이 참이 아닙니다. 최종 멤버 변수를 설정해야합니다. 또한 예제가 컴파일되지 않을 것이므로'this.rank'와'this.suit'를 재설정 할 수 없습니다. 나머지 부분은 여전히 합법적입니다. – jtahlborn
@lwburk & @jtahlborn 당신은 맞습니다 - 최종 회원은 재설정 할 수 없습니다 - 빨리 입력하십시오! – FrVaBe