包含一组固定可变对象的对象是否可变?
易变性仍然让我时不时困惑。
如果我有一个包含一组固定可变对象的对象。 你认为这个对象是可变的吗?
例子:我有一个叫Puzzle的对象,它包含一组固定的Pieces。 碎片是可变的。 例如,它们可以向上并且其方向可以改变。 假设在这个例子中你不能松动棋子(如果在现实生活中这只是真的......),我猜Puzzle对象仍然是不变的,对吗?
从维基百科:在面向对象和函数式编程中,不可变对象(不可更改对象)是一个对象,其状态在创建后无法修改。 这与可变对象(可变对象)形成对比,可变对象可在创建后进行修改。
在你的例子中,Puzzle对象是可变的,因为你可以改变其中一个Pieces的状态。
不。该对象将是可变的。 具有不变性的一个重要事情是,每次调用该对象作为参数的(纯)函数都会返回相同的值。 如果对象包含可变属性,则情况不会如此。 考虑这个例子:
一个可变的类:
class Counter {
private int count = 0;
public int getCount() {
return count++;
}
}
一个“不可变的”类:
class Container {
private final Counter theCounter = new Counter();
public Counter getCounter() { return theCounter; }
}
而在Container
上运行的看似纯粹的功能:
public int getCount(Container container) {
return container.getCounter().getCount();
}
所以,如果Container
是不可变的,那么如果同一个Container
被传递给它两次,那么getCount()
会返回相同的值。 但这种情况并非如此。
Container container = new Container();
getCount(container); // Returns 0.
getCount(container); // Returns 1.
不,如果对象包含至少一个可变对象,则该对象不可变。 这里的作品是可变的。 所以拼图不可能是不可改变的。
如果你想让Puzzle不可变,那么一些如何根据需求使这些部分不可变。
链接地址: http://www.djcxy.com/p/20797.html上一篇: Is an object that contains a fixed set of mutable objects mutable?