Java 不可变类对象

Java 不可变类对象,java,class,immutability,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 clas

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

}
确切地说

final class imm{ 

imm是不可扩展的。

您永远不能
扩展
final类,但您可以将其作为对象

推广范例

class imm2 extends imm { } // Illegal, imm is final. 
创建新的(实例化)


您的
imm2
类不是不可变的,因为它有一个改变其状态的
setValue
方法。删除此方法以使其不可变。

类为final并不意味着它是不可变的,它只是意味着不能进一步扩展它。它是否不可变取决于您如何定义它的行为


正如前面提到的
Eran
一样,
imm2
不是不可变的,因为您允许用户更改其内部状态(但它是最终的,不能扩展)

您可以编译程序并找出答案。您不能扩展“imm”,因为该类是
final
。如果您从
imm2
中删除
setValue
,则该类也将是不可变的。如果我删除setValue,它将是不可变的,但仍有错误,并且我正在试图找到在第二个类中创建对象的方法。有什么方法吗?
这里有问题吗
。。是,变量
不是
私有的
。与class
imm2
位于同一个包中的类可以更改该变量。在不可变的
imm2
类中,有两种方法可以初始化
imm
。1.在变量声明中(即,
private final imm value=new imm(42);
),或2。在
imm2
构造函数中,您可以编写
value=newimm(42)。然而,困扰我的并不是
imm2
不是一成不变的,而是它以小写字母开头!这意味着我不能使第二个类中的对象正确???@yazan-No.Extend和instantiate(生成新对象)不同。您可以在imm2中创建imm的对象。如果要使imm2不可变,请应用应用于imm的相同规则。最后一个例子是varibale,构造函数,无二传者等等。非常感谢,明白了。谢谢,这就是我的全部need@yazan-不客气,很高兴我能帮上忙。谢谢你的帮助,我所需要的一切都被删除了你的正确设置值,非常感谢。
imm yourImm = new imm(1); // Perfectly legal.