这是一个不可移动的课吗? 一个不可变的类是否有必要是最终的?
我有一个不可移动的盒子类,对盒子的更改应该会创建一个新的盒子。
public class MyImmutableBox {
Integer length;
Integer breadth;
/*Constructor*/
public MyImmutableBox(Integer length,Integer breadth){
this.length=length;
this.breadth=breadth;
}
/*Getters*/
public Integer getBreadth() {
return breadth;
}
public Integer getLength() {
return length;
}
/*Member functions*/
/*Changing entire box size*/
public MyImmutableBox changeMyBoxSize(Integer lengthToBeAltered,Integer breadthToBeAltered){
return new MyImmutableBox(length+lengthToBeAltered,breadth+breadthToBeAltered);
}
/*Changing either length otr breadth*/
public MyImmutableBox changeMyBoxLenth(Integer lengthToBeAltered){
return new MyImmutableBox(length+lengthToBeAltered,breadth);
}
public MyImmutableBox changeMyBoxBreadth(Integer breadthToBeAltered){
return new MyImmutableBox(length,breadth+breadthToBeAltered);
}
}
答案 0 :(得分:4)
不,这绝对不是一成不变的。您的length
和breadth
字段不是私有或只读,因此此代码可以使用:
MyImmutableBox box = new ImmutableBox(5, 3);
box.length = 10;
box.breadth = 20;
(顺便说一下,为什么你使用Integer
而不是int
并不清楚。)
如果您 将字段设为私有并避免在您的类中修改它们,或将它们设为最终字段,或(最好)两者,然后你所显示的类型将是不可变的。但它不会阻止可变子类 - 你应该同时使类最终完成。