在我的Java项目中,我有各种类型的Traders的载体。这些不同类型的交易者是交易者类的子类。现在,我有一个以交易者为参数并将其存储在向量中约50次的方法。我遇到了问题,因为存储同一对象50次仅存储同一对象的50个引用。我需要存储该对象的50个副本。我已经研究了实现Clone的方法,但是我不希望定义Trader类型的程序员不得不担心使其类可克隆。另外,如this page所指出的,实现克隆会产生各种问题。我认为复制构造函数也不起作用,因为如果我在Trader类中定义了一个复制构造函数,它将不会知道它正在复制的Trader类型,而只是创建一个通用Trader。我能做什么?
编辑:我不是真的想要特定对象的精确副本。我真正想做的是向向量添加一定数量的交易者。问题是用户需要在参数中指定他要添加哪种类型的交易者。这是我要执行的操作的一个示例:(尽管我的语法完全是虚构的)
public void addTraders(*traderType*)
{
tradervect.add(new *traderType*())
}
如何在Java中实现类似的功能?
最佳答案
只需添加一个抽象的复制方法。您可以使用协变返回类型,以便指定派生类型以返回派生实例,这可能重要也可能不重要。
public interface Trader {
Trader copyTrader();
...
}
public final class MyTrader implements Trader {
MyTrader copyTrader() {
return new MyTrader(this);
}
...
}
有时,您可能需要一般性地处理需要克隆的
Trader
派生类型的集合,然后返回正确类型的集合。为此,您可以惯用方式使用泛型:public interface Trader<THIS extends Trader> {
THIS copyTrader();
...
}
public final class MyTrader implements Trader<MyTrader> {
public MyTrader copyTrader() {
return new MyTrader(this);
}
...
}