我正在创建银行业务模型,而Account类具有accountNumber字段。帐号永远不会改变,但我不能将字段设置为final,因为这会阻止构造函数设置它。
如果无法做到这一点,那没关系。这只是一个CS任务,所以我想确保我以最好的方式做到这一点。
最好的实现方法是将字段及其setter方法设为私有吗?
答案 0 :(得分:24)
构造函数可以设置它,如果它被标记为final
,例如以下是合法的:
public class BankAccount {
private final int accountNumber;
public BankAccount(int accountNumber) {
this.accountNumber = accountNumber;
}
}
实际上,如果某个字段标记为final
但未在其声明中初始化,则必须在所有构造函数中设置该字段。
如果您没有在班级上设置公共设置者,则无法从班级外部更改帐号,但将其标记为最终版本也会阻止(意外)被班级内的任何方法更改。
答案 1 :(得分:4)
如果变量是final
,它可以(并且必须)在构造函数中初始化。