第一个类是不可变类,我也需要创建imm2不可变类,我的问题是我可以在imm2类中使用imm类的对象吗 ??
final class imm{
private final int value;
public imm(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
final class imm2{
imm value; // is this legal ???
public imm2(imm value) {
this.value = value;
}
public imm getValue() {
return value;
}
// set value removed is there any problems here i mean is my code correct now?
}
答案 0 :(得分:2)
你永远不能extend
final class
,但你可以制作它们的对象。
扩展示例;
class imm2 extends imm { } // Illegal, imm is final.
创建新的(实例化);
imm yourImm = new imm(1); // Perfectly legal.
答案 1 :(得分:2)
您的imm2
类不是不可变的,因为它具有setValue
方法,可以更改其状态。删除此方法以使其不可变。
答案 2 :(得分:1)
好的定义
final class imm{
imm不可扩展..
答案 3 :(得分:1)
一个类是final并不意味着它是不可变的,它只是意味着你不能进一步扩展它。它是否不可变取决于你如何定义它的行为。
由于Eran
已经提到imm2
不是不可变的,因为您允许用户更改其内部状态(但它是最终的且无法扩展)