java - 这里需要Cloneable吗?

标签 java clone findbugs

Findbugs 为 public GsmSignalStrength clone() 提供以下警告: 类定义了 clone() 但没有实现 Cloneable。

为什么我必须实现 Cloneable?是因为浅拷贝和深拷贝吗?我必须为我糟糕的 Java 技能道歉,但我是 Java 新手。

这是我的代码:

class GsmSignalStrength
{
    static final byte SIGNAL_STRENGTH_UNKNOWN = 99;
    static final byte SIGNAL_STRENGTH_1 = 1;
    static final byte SIGNAL_STRENGTH_2 = 2;
    static final byte SIGNAL_STRENGTH_3 = 3;
    static final byte SIGNAL_STRENGTH_4 = 4;
    static final byte SIGNAL_STRENGTH_5 = 5;

    /* Constructors */

    GsmSignalStrength(byte signalStrength)
    {
        initClassVars(signalStrength);
    }

    GsmSignalStrength()
    {
        initClassVars(SIGNAL_STRENGTH_UNKNOWN);
    }

    GsmSignalStrength(byte[] serializedData, IntClass deserializationIndex)
    {
        initClassVars(SIGNAL_STRENGTH_UNKNOWN);
        setClassProperties(serializedData, deserializationIndex);
    }

    byte value;

    /* Methods */

    public void copyTo(GsmSignalStrength destination)
    {
        destination.value = this.value;
    }

    public GsmSignalStrength clone()
    {
        GsmSignalStrength clonedValue = new GsmSignalStrength();

        this.copyTo(clonedValue);

        return clonedValue;
    }

    private void initClassVars(byte signalStrength)
    {
        this.value = signalStrength;
    }
}

最佳答案

Cloneable 在这里不需要

这是因为您的 clone() 实现实际上并未克隆该对象。在 Java 中,克隆具体是指使用 Object.clone(),它使用 JVM 魔法来复制对象。尽管您的代码做了某种等同于克隆的事情(更好的是,恕我直言 - 它避免使用魔法),但它不是真正的克隆。

然而,不知道这一点,所以它担心您可能正在尝试克隆一个非 Cloneable 对象。

这里的一个解决方案可能是将您的方法重命名为其他名称(copy()?),因此它看起来不像是克隆。

关于java - 这里需要Cloneable吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10105292/

相关文章:

java - 无法加载 application.properties 文件

javascript - 将 Canvas 缓存在对象中(在内存中)

java - Findbugs Maven 插件忽略阈值

java - 除非您更新 Google Play 服务,否则 com.tools.fd.runtime.BootstrapApplication 不会运行

java - Mockito 和 ReloadableResourceBundleMessageSource 不能很好地结合在一起吗?

抽象类中的c++克隆函数

java - FindBugs Integer 与预期的参数类型不兼容?

java - Spotbugs 与 JDeveloper 集成

Java 同步字符串 IllegalMonitorStateException

java - 克隆方法是否克隆覆盖的方法?