24小时热门版块排行榜    

Znn3bq.jpeg
查看: 722  |  回复: 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

新虫 (正式写手)

引用回帖:
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的回帖
查看全部 6 个回答

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的回帖
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 江苏大学 工科调剂 捡漏 +3 Evan_Liu 2026-04-09 5/250 2026-04-10 10:22 by Evan_Liu
[考研] 一志愿北理工298英一数二求调剂 +8 Reframe 2026-04-10 9/450 2026-04-10 09:59 by lbsjt
[考研] 277求调剂 +19 倪建设 2026-04-06 19/950 2026-04-10 09:24 by guosr9609
[考研] 288求调剂,一志愿华南理工大学071005 +16 ioodiiij 2026-04-08 16/800 2026-04-09 23:08 by wolf97
[考研] 284求调剂 +8 让我上岸吧阿西 2026-04-09 10/500 2026-04-09 18:34 by 段伟艳
[考研] 材料专硕初试分332一志愿西北工业大学, +12 故人?? 2026-04-09 12/600 2026-04-09 18:34 by Ccclqqq
[考研] 085600材料与化工301分求调剂院校 +33 刺痛jk 2026-04-06 34/1700 2026-04-09 18:31 by hy861222
[考研] 283电子信息求调剂 +4 三石WL 2026-04-08 4/200 2026-04-09 10:21 by wp06
[考研] 机械工程313分找工科调剂 +3 双一流本科机械 2026-04-08 3/150 2026-04-08 20:41 by 土木硕士招生
[考研] 一志愿华东理工085601材料工程303分求调剂 +15 a1708 2026-04-06 15/750 2026-04-08 16:23 by luoyongfeng
[考研] 304求调剂 +10 素年祭语 2026-04-06 17/850 2026-04-08 09:05 by 蓝云思雨
[考研] 一志愿西电085401求调剂 +4 sunw1306 2026-04-07 4/200 2026-04-07 16:40 by 啵啵啵0119
[考研] 工科 22408 267求推荐 +4 wanwan00 2026-04-05 5/250 2026-04-06 22:47 by chenzhimin
[考研] 一志愿211生物学280分 求调剂 +5 李rien 2026-04-05 5/250 2026-04-06 10:30 by zhyzzh
[考研] 材料调剂 +14 壹贰贰亿 2026-04-04 14/700 2026-04-05 23:31 by 来看流星雨10
[考研] 348求调剂 +3 车厘子zzz 2026-04-05 3/150 2026-04-05 20:30 by 啵啵啵0119
[考研] 085500机械专硕初试288求调剂 +3 GZJguo666- 2026-04-05 3/150 2026-04-05 18:06 by jkddd
[考研] 材料383求调剂 +5 郭阳阳阳成 2026-04-04 5/250 2026-04-04 19:06 by dongzh2009
[考研] 272求调剂 +4 松柏常青5 2026-04-03 4/200 2026-04-04 17:03 by babysonlkd
[考研] 考研调剂 +3 Draa 2026-04-03 3/150 2026-04-03 17:37 by hgwz7468
信息提示
请填处理意见