我正在开发一个类库.
>我有一个矩阵的抽象基类Matrix,它提供了一些基本方法的实现.
>派生自Matrix是不同类型矩阵的具体子类.
>我要求矩阵可以克隆,因此Matrix实现了Cloneable接口.
>从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()就足够了.
如果你的类是不可变的,那么在构造它时它应该已经克隆了任何可变类.因此,我认为你的班级有任何领域的浅拷贝是安全的.
JavaDocs声明x.clone()!= x是首选.虽然这不是一个绝对的要求,但你的计划肯定会违反这一要求.