为不可变类实现clone()

Axe*_*xel 7 java clone class-design immutability

我正在开发一个类库.

  1. 我有一个矩阵的抽象基类Matrix,它提供了一些基本方法的实现.
  2. 派生自Matrix是不同类型矩阵的具体子类.
  3. 我要求矩阵可以克隆,因此Matrix实现了Cloneable接口.
  4. 从Matrix派生的一些类是不可变的

对于不可变类的克隆方法而言,它是否可以接受而不是返回对象的克隆,而是返回对象本身?

一些(过于简化的)代码用于澄清:

abstract class Matrix implements Cloneable {
   ...
}

class ImmutableMatrix extends Matrix {
    ImmutableMatrix clone() {
        return this;
    }
    ...
}

class SomeOtherMatrix extends Matrix {
    SomeOtherMatrix clone() {
        SomeOtherMatrix other = super.clone();
        ...
        return other;
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

Dun*_*nes 10

我原本以为打电话super.clone()就足够了.

如果你的类是不可变的,那么在构造它时它应该已经克隆了任何可变类.因此,我认为你的班级有任何领域的浅拷贝是安全的.

JavaDocs状态x.clone() != x是首选.虽然这不是一个绝对的要求,但你的计划肯定会违反它this.