我当时正在设计一个用于二十一点游戏的卡类。每一个不可变的阶级应该是最终的吗?
我的设计是用一个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