Java 不可变类对象
第一个类是不可变类,我也需要使imm2不可变类,我的问题是,我可以在imm2类中使用imm类的对象吗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
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,它将是不可变的,但仍有错误,并且我正在试图找到在第二个类中创建对象的方法。有什么方法吗?这里有问题吗
。。是,变量值
不是私有的
。与classimm2
位于同一个包中的类可以更改该变量。在不可变的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.