相关疑难解决方法(0)

如何正确覆盖克隆方法?

我需要在我的一个没有超类的对象中实现深度克隆.

处理CloneNotSupportedException超类抛出的检查的最佳方法是什么(是Object)?

一位同事建议我按以下方式处理:

@Override
public MyObject clone()
{
    MyObject foo;
    try
    {
        foo = (MyObject) super.clone();
    }
    catch (CloneNotSupportedException e)
    {
        throw new Error();
    }

    // Deep clone member fields here

    return foo;
}
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎是一个很好的解决方案,但我想把它扔到StackOverflow社区,看看是否还有其他任何我可以包含的见解.谢谢!

java clone cloneable cloning

109
推荐指数
5
解决办法
10万
查看次数

为什么在java.lang.Object中保护clone()方法?

clone()定义为受保护的具体原因是java.lang.Object什么?

java oop clone

105
推荐指数
3
解决办法
5万
查看次数

clone()vs copy constructor vs factory方法?

我在Java上实现了克隆()的快速谷歌,发现:http: //www.javapractices.com/topic/TopicAction.do?Id = 71

它有以下评论:

复制构造函数和静态工厂方法提供了克隆的替代方法,并且更容易实现.

我想做的就是做一份深刻的副本.实现clone()似乎很有意义,但这篇谷歌排名很高的文章让我有点害怕.

以下是我注意到的问题:

复制构造函数不适用于泛型.

这是一些无法编译的伪代码.

public class MyClass<T>{
   ..
   public void copyData(T data){
       T copy=new T(data);//This isn't going to work.    
   }
   ..
}
Run Code Online (Sandbox Code Playgroud)

示例1:在泛型类中使用复制构造函数.

工厂方法没有标准名称.

拥有可重用代码的接口非常好.

public class MyClass<T>{
    ..
    public void copyData(T data){
        T copy=data.clone();//Throws an exception if the input was not cloneable
    }
    ..
}
Run Code Online (Sandbox Code Playgroud)

示例2:在泛型类中使用clone().

我注意到克隆不是静态方法,但是不是仍然需要制作所有受保护字段的深层副本吗?在实现clone()时,在非可克隆子类中抛出异常的额外工作对我来说似乎微不足道.

我错过了什么吗?任何见解将不胜感激.

java clone

78
推荐指数
5
解决办法
5万
查看次数

为什么人们如此害怕使用clone()(在集合和JDK类上)?

有很多次我认为使用clone()并不是一种糟糕的做法.是的,我知道这些论点.布洛赫说这很糟糕.他的确做到了,但他说实施clone()很糟糕.另一方面,使用clone,特别是如果它由可信库(如JDK)正确实现,则可以.

就在昨天,我讨论了我的一个答案,仅仅暗示使用clone()for ArrayList是可以的(并且由于这个原因没有投票,我猜).

如果我们看@authorArrayList,我们可以看到一个熟悉的名字-乔希布洛赫.因此,clone()ArrayList(和其他收藏品)是完全正常的(看看他们的实现).

同样的Calendar,也许是大多数java.langjava.util类.

那么,请告诉我为什么不使用 clone() JDK类?

java

42
推荐指数
4
解决办法
7316
查看次数

标签 统计

java ×4

clone ×3

cloneable ×1

cloning ×1

oop ×1