不可变的类对象

时间:2014-12-16 11:50:06

标签: java class immutability

第一个类是不可变类,我也需要创建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?

}

4 个答案:

答案 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不是不可变的,因为您允许用户更改其内部状态(但它是最终的且无法扩展)