克隆与实例化新类

One*_*rld 8 java instances cloning

克隆这种情况下的良好做法?怎么做得更好?

public ModelCollection startParsing() {

   return parseFeed(new ModelSpecialEntry); 
}

public ModelCollection parseFeed(ModelEntry pattern)  {

   ModelCollection modelCollection = new ModelCollection();

   while( condition ) {

     //TODO: Is cloning the best solution?
     ModelEntry model = (ModelEntry) pattern.clone();



     model.parse();

     //add this item to an collection
     modelCollection.add(model);


   }

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

Viv*_*sse 10

克隆在Java中很少是一个好主意.尝试其他技术,如复制构造函数或工厂方法.

维基百科有一篇很好的文章,说明为什么clone()Java有许多缺点.

使用复制构造函数,创建一个构造函数,该构造函数将当前类的实例作为参数,并复制本地类中的所有字段:

public class Foo {

    private String bar;
    private String baz;

    public Foo(Foo other) {
        this.bar = other.bar;
        this.baz = other.baz;
    }

}
Run Code Online (Sandbox Code Playgroud)

使用工厂方法,创建一个方法,将对象作为参数并返回包含相同值的对象:

public Foo copyFoo(Foo other) {
    Foo foo = new Foo();
    foo.setBar(other.getBar());
    foo.setBaz(other.getBaz());
}
Run Code Online (Sandbox Code Playgroud)

  • 那么应该避免原型模式吗? (3认同)

小智 1

我认为,这就像编程中的其他一切一样:它取决于对象规范。

尝试进行一个非常快速的测试:克隆 100000 个对象并实例化相同数量的对象,然后检查需要多长时间 (System.currentTimeInMilis())。通常克隆速度更快。

请记住,克隆有一个问题 - 添加新字段等时,您也需要修改 clone() 方法。