我正在开发一个类库。
- 我有一个矩阵的抽象基类 Matrix,它提供一些基本方法的实现。
- 从 Matrix 派生的是不同类型矩阵的具体子类。
- 我要求矩阵是可克隆的,所以 Matrix 实现了 Cloneable 接口(interface)。
- 一些从 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;
}
...
}
最佳答案
我原以为调用 super.clone()
就足够了。
如果您的类是不可变的,那么它在构造时应该已经克隆了所有可变类。因此,我认为拥有类(class)所有字段的浅拷贝是安全的。
JavaDocs 指出 x.clone() != x
是首选。虽然这不是绝对要求,但您只返回 this
的计划肯定会违反这一要求。
关于java - 为不可变类实现 clone(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13207888/