24小时热门版块排行榜    

查看: 695  |  回复: 5

2012200838

新虫 (正式写手)

[求助] 去掉类中的设置方法,类是可以不可改变的吗?

问题:如果重新定义程序清单的Loan类,去掉其中的设置方法,这个类是不可改变的吗?
If you redefine the Loan class without setter methods, is the class immutable?
这是原书的标准答案:
No. It must also contain no get methods that would return a reference to a mutable data field object.

不是很理解,get方法不是仅仅是访问吗,而且数据域是私有的,怎么是可以改变的的呢?

代码:
CODE:
public class Loan {
  private double annualInterestRate;
  private int numberOfYears;
  private double loanAmount;
  private java.util.Date loanDate;

  /** Default constructor */
  public Loan() {
    this(2.5, 1, 1000);
  }

  /** Construct a loan with specified annual interest rate,
      number of years and loan amount
    */
  public Loan(double annualInterestRate, int numberOfYears,
      double loanAmount) {
    this.annualInterestRate = annualInterestRate;
    this.numberOfYears = numberOfYears;
    this.loanAmount = loanAmount;
    loanDate = new java.util.Date();
  }

  /** Return annualInterestRate */
  public double getAnnualInterestRate() {
    return annualInterestRate;
  }

  /** Set a new annualInterestRate */
  public void setAnnualInterestRate(double annualInterestRate) {
    this.annualInterestRate = annualInterestRate;
  }

  /** Return numberOfYears */
  public int getNumberOfYears() {
    return numberOfYears;
  }

  /** Set a new numberOfYears */
  public void setNumberOfYears(int numberOfYears) {
    this.numberOfYears = numberOfYears;
  }

  /** Return loanAmount */
  public double getLoanAmount() {
    return loanAmount;
  }

  /** Set a newloanAmount */
  public void setLoanAmount(double loanAmount) {
    this.loanAmount = loanAmount;
  }

  /** Find monthly payment */
  public double getMonthlyPayment() {
    double monthlyInterestRate = annualInterestRate / 1200;
    double monthlyPayment = loanAmount * monthlyInterestRate / (1 -
      (Math.pow(1 / (1 + monthlyInterestRate), numberOfYears * 12)));
    return monthlyPayment;   
  }

  /** Find total payment */
  public double getTotalPayment() {
    double totalPayment = getMonthlyPayment() * numberOfYears * 12;
    return totalPayment;   
  }

  /** Return loan date */
  public java.util.Date getLoanDate() {
    return loanDate;
  }
}

回复此楼
生命就是一场旅行,不要错过了路边的风景!
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

2012200838

新虫 (正式写手)

生命就是一场旅行,不要错过了路边的风景!
2楼2015-11-14 14:42:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

mfkkgriu

金虫 (小有名气)

java啊,应该差不多没有set设置方法好像是不能改变吧。技术不精说错勿怪。

发自小木虫Android客户端
3楼2015-11-14 15:33:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

mfkkgriu

金虫 (小有名气)

汗,忘记了函数返回值可以改变。>_<

发自小木虫Android客户端
4楼2015-11-14 15:35:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

2012200838

新虫 (正式写手)

引用回帖:
3楼: Originally posted by mfkkgriu at 2015-11-14 15:33:53
java啊,应该差不多没有set设置方法好像是不能改变吧。技术不精说错勿怪。

其实这个答案贴错了,不过这个答案也指出问题所在。

如果A类私有数据域data 数据类型为B类的对象的引用,难道可以在A类外通过A类中get方法调用data用B类中set方法改变data.

不知道我表达清楚没有。

书上关于类不可改变的条件是这样说的:
For a class to be immutable, it must meet the following requirements:
1.All data fields must be private.
2.There cant be any mutator methods for data fields.
3.No accessor methods can return a reference to a data field that is mutable.

You should take the 3rd requirement seriously.

发自小木虫Android客户端
生命就是一场旅行,不要错过了路边的风景!
5楼2015-11-14 18:01:42
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

2012200838

新虫 (正式写手)

引用回帖:
3楼: Originally posted by mfkkgriu at 2015-11-14 15:33:53
java啊,应该差不多没有set设置方法好像是不能改变吧。技术不精说错勿怪。

其中loanDate 可以改变。

发自小木虫Android客户端
生命就是一场旅行,不要错过了路边的风景!
6楼2015-11-14 18:03:42
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 2012200838 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 346求调剂[0856] +3 WayneLim327 2026-03-16 6/300 2026-03-19 11:21 by WayneLim327
[考研] 085601材料工程专硕求调剂 +7 慕寒mio 2026-03-16 7/350 2026-03-19 10:57 by w沐阳w
[考研] 一志愿天大材料与化工(085600)总分338 +5 蔡大美女 2026-03-13 5/250 2026-03-19 10:44 by 是小刘呀~
[考研] 332求调剂 +3 ydfyh 2026-03-17 3/150 2026-03-19 10:14 by 功夫疯狂
[考研] 0817 化学工程 299分求调剂 有科研经历 有二区文章 +9 rare12345 2026-03-18 9/450 2026-03-19 09:46 by 30660438
[考研] 0703化学调剂,求各位老师收留 +10 秋有木北 2026-03-14 10/500 2026-03-19 05:52 by anny19840123
[考研] 304求调剂 +6 司空. 2026-03-18 6/300 2026-03-18 23:03 by 星空星月
[考研] 266求调剂 +5 阳阳哇塞 2026-03-14 9/450 2026-03-18 15:05 by stone_128
[考研] 0703化学调剂 +4 pupcoco 2026-03-17 7/350 2026-03-18 12:14 by djl2006
[考研] 307求调剂 +3 冷笙123 2026-03-17 3/150 2026-03-18 09:55 by macy2011
[考研] 环境工程调剂 +8 大可digkids 2026-03-16 8/400 2026-03-18 09:36 by zhukairuo
[考研] 268求调剂 +7 好运连绵不绝 2026-03-12 8/400 2026-03-17 20:28 by xilongliang
[考研] 东南大学364求调剂 +5 JasonYuiui 2026-03-15 5/250 2026-03-16 21:28 by 木瓜膏
[考研] 085600调剂 +5 漾漾123sun 2026-03-12 6/300 2026-03-16 15:58 by 漾漾123sun
[考研] 277材料科学与工程080500求调剂 +3 自由煎饼果子 2026-03-16 3/150 2026-03-16 14:10 by 运气yunqi
[考研] 070305求调剂 +3 mlpqaz03 2026-03-14 4/200 2026-03-15 11:04 by peike
[考研] 328求调剂 +3 5201314Lsy! 2026-03-13 6/300 2026-03-14 15:31 by hyswxzs
[考研] 297求调剂 +4 学海漂泊 2026-03-13 4/200 2026-03-14 11:51 by 热情沙漠
[考研] 材料工程调剂 +9 咪咪空空 2026-03-12 9/450 2026-03-13 22:05 by 星空星月
[考研] 求材料调剂 085600英一数二总分302 前三科235 精通机器学习 一志愿哈工大 +4 林yaxin 2026-03-12 4/200 2026-03-13 22:04 by 星空星月
信息提示
请填处理意见