在我的Java项目中,我有各种类型的Traders的载体。这些不同类型的交易者是交易者类的子类。现在,我有一个以交易者为参数并将其存储在向量中约50次的方法。我遇到了问题,因为存储同一对象50次仅存储同一对象的50个 引用 。我需要存储该对象的50个 副本 。我已经研究了实现Clone的方法,但是我不希望定义Trader类型的程序员不必担心使其类可克隆。另外,正如本页面所指出的,实施克隆会产生各种问题。我认为复制构造函数也不起作用,因为如果我在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需要克隆的派生类型的集合,然后返回正确类型的集合。为此,您可以惯用方式使用泛型:
Trader
public interface Trader<THIS extends Trader> { THIS copyTrader(); ... } public final class MyTrader implements Trader<MyTrader> { public MyTrader copyTrader() { return new MyTrader(this); } ... }