包含一组固定可变对象的对象是否可变?

易变性仍然让我时不时困惑。

如果我有一个包含一组固定可变对象的对象。 你认为这个对象是可变的吗?

例子:我有一个叫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?

下一篇: Swift make method parameter mutable?