我當時正在設計一個用於二十一點遊戲的卡類。每一個不可變的階級應該是最終的嗎?
我的設計是用一個getValue()返回一個Card類,例如,返回J爲11,Q爲12,K爲13,然後用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類無法編譯。它無法訪問'rank'和'suit'。 – 2011-04-09 19:46:32
最後的陳述是不正確的。你必須設置任何最終的成員變量。另外,你的例子不會編譯,因爲你不能重置'this.rank'和'this.suit'。但是你的其他觀點仍然是合法的。 – jtahlborn 2011-04-09 19:46:39
@lwburk&@jtahlborn你是對的 - 最終成員不能被重置 - 輸入這個快速! – FrVaBe 2011-04-09 20:42:07