12.5 Card对象是不可修改的
Card 的实例变量都是私有的,因此在其他类中无法访问。我们可提供获取方法,让其他类能够读取实例变量 rank 和 suit 的值:
public int getRank() {return this.rank;}public int getSuit() {return this.suit;}
是否提供设置方法属于设计方面的决策。如果我们提供了,Card 对象将是可修改的,因此可以将一张牌变成另一张牌。这可能不是我们所需要的功能,而且一般而言,可修改的对象更容易出错。因此,让 Card 对象不可修改可能是更好的选择。为此,只要不提供任何非纯方法(包括设置方法)就可以了。
这很容易,但并不牢靠,因为以后可能有人傻乎乎地添加非纯方法。为防范这种情况,可将实例变量声明为 final 的:
public class Card {private final int rank;private final int suit;...}
你依然可以在构造函数中给这些变量赋值,但如果有人编写试图修改这些变量的方法,编译器将报错。
