- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
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 魔法来复制对象。尽管您的代码做了某种等同于克隆的事情(更好的是,恕我直言 - 它避免使用魔法),但它不是真正的克隆。
然而,findbugs不知道这一点,所以它担心您可能正在尝试克隆一个非 Cloneable
对象。
这里的一个解决方案可能是将您的方法重命名为其他名称(copy()
?),因此它看起来不像是克隆。
关于java - 这里需要Cloneable吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10105292/
我正在从 C++ 迁移到 Java,并认为自己是 Java 菜鸟。我最近一直在查看一个庞大的代码库,其中有几个类型的示例 public class Myclass implements Cloneab
class MyCls implements Cloneable { @Override protected MyCls clone() throws CloneNotSupportedExc
public class test implements Cloneable { @Override public test clone() { return (tes
class MyCls implements Cloneable { @Override protected MyCls clone() throws CloneNotSupportedExc
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 6 年前。 Improve this qu
我有一个非常简单的问题(我猜!)Cloneable接口(interface)如何保护clone方法,而接口(interface)只能声明public方法? 最佳答案 Cloneable是 marker
我必须克隆一个没有实现 Cloneable 接口(interface)的对象,该怎么做。 实际上,在我的项目中,我正在使用 JCChart。现在我的类扩展了 MultiChart,我必须创建类的深拷贝
我的框架处理任何类的域对象。我需要能够浅克隆这样的域对象实例 foo,就好像它实现了 Cloneable(它没有实现)并且我调用了 Object.clone () 返回一个浅克隆。 不起作用的东西:
我已经阅读了 Object 和 Cloneable 的 javadoc,只是没有“得到”一些东西。有人可以向我解释以下两个示例的性能和/或功能差异吗: public class Widget {
假设我有这个类: public abstract class AbstractFoo implements Cloneable { public abstract Object clone()
我正在读这个answer他提到了一个link ,作者解释了为什么我们不应该使用 Cloneable。但是,仍然怀疑那里所说的内容 If I have an array of Cloneable, yo
嘿,我实际上正在使用 Java 上的自定义 Vector 类, public class Vector { private double X; private double Y;
public class Color { String color; Color(String color) { this.color=color; } } publi
在尝试克隆可变集合时,我最初的方法是对 mutable.Cloneable 特征使用 clone() 方法。但是,这取决于创建引用副本的 java.Object.clone 实现,而不是深拷贝。通过测
我不明白为什么我们不能执行以下操作: interface MyInterface extends Cloneable {} class myClazz implements MyInterface {
在尝试克隆可变集合时,我最初的方法是对 mutable.Cloneable 特征使用 clone() 方法。但是,这取决于创建引用副本的 java.Object.clone 实现,而不是深拷贝。通过测
这个问题在这里已经有了答案: Java: Rationale of the Cloneable interface (5 个回答) Why is Cloneable not deprecated? (
为什么我们不能将 Cloneable 作为抽象类而不是将其作为接口(interface)? 最佳答案 Java不支持类的多重继承。 如果Cloneable(其中抽象类)您强制整个对象树可克隆或不可克隆
要克隆类的对象,我们实现 Cloneable 接口(interface),并重写克隆方法: protected Object clone() throws CloneNotSupportedExcep
为什么以下代码在 JDK7 中抛出 CloneNotSupportedException 而在 JDK6 中不抛出? public class DemoThread extends Thread im
我是一名优秀的程序员,十分优秀!