java – 为不可变类实现clone()

我正在开发一个类库.

>我有一个矩阵的抽象基类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是首选.虽然这不是一个绝对的要求,但你的计划肯定会违反这一要求.

相关文章

Java中的String是不可变对象 在面向对象及函数编程语言中,不...
String, StringBuffer 和 StringBuilder 可变性 String不可变...
序列化:把对象转换为字节序列的过程称为对象的序列化. 反序...
先说结论,是对象!可以继续往下看 数组是不是对象 什么是对...
为什么浮点数 float 或 double 运算的时候会有精度丢失的风险...
面试题引入 这里引申出一个经典问题,看下面代码 Integer a ...