sometype var = somevalue;
mutate(var);
// var is now someothervalue
void mutate(sometype &a) {
a = someothervalue;
}
Java中有同等的东西吗?
我想完成以下事情:
Customer a;
public static void main(String[] args) {
a = newCustomer("Charles");
Customer b = null;
mutate(b);
System.out.println(b.getName()); // NullPointerException, expected "Charles"
}
void mutate(Customer c) {
c = a;
}
如果Customer是可变的,为什么会产生NullPointerException?
解决方法:
看起来你对Mutability感到困惑.可变性只是改变对象状态.您在示例中显示的不仅仅是可变性.您通过将该实例引用到其他实例(=)来完全更改实例.
sometype var = somevalue;
mutate(var);
void mutate(sometype a) {
a = someothervalue; // changing a to someothervalue.
}
什么是可变性
sometype var = somevalue;
mutate(var);
var.getChangeState() // just gives you the latest value you done in mutate method
void mutate(sometype a) {
varType someParamForA= valueX;
a.changeState(someParamForA); // changing a param inside object a.
}
是的,以防在Java中完全有效的可变对象.调用mutate方法后,您可以看到更改.
原始案例::
请记住,在原语的情况下,你不能用Java做到这一点.所有原始变量都是不可变的.
如果你想用Java来实现原语,你可以试试这样的东西
int var = 0;
var = mutate(var);
int mutate(int a) {
a = a + 1;
return a;
}
标签:java,oop,mutation
来源: https://codeday.me/bug/20190622/1265704.html