Cor*_*ker 6 java clone reference vector subclass
在我的Java项目中,我有一个各种类型的交易者的向量.这些不同类型的交易者是Trader类的子类.现在,我有一个方法,将Trader作为参数,并在向量中存储50次左右.我遇到了问题,因为存储相同的对象50次只是存储50个相同对象的引用.我需要存储50 个对象的副本.我已经研究过如何实现Clone,但是我不希望定义一种Trader的程序员不必担心让他们的类可以克隆.此外,正如本页所指出的,实现克隆会产生各种问题.我认为复制构造函数不会起作用,因为如果我在Trader类中定义了一个,它就不会知道它正在复制的Trader的类型,只是制作一个通用的Trader.我能做什么?
编辑:我真的不想制作某个特定对象的精确副本.我真正想要做的是在向量中添加一定数量的交易者.问题是用户需要在参数中指定他想要添加的交易者类型.这是我想要做的一个例子:(虽然我的语法完全是虚构的)
public void addTraders(*traderType*)
{
tradervect.add(new *traderType*())
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能在Java中实现这样的目标?
只需添加一个抽象复制方法即可。您可以使用协变返回类型,以便指定派生类型返回派生实例,这可能很重要,也可能不重要。
public interface Trader {
Trader copyTrader();
...
}
public final class MyTrader implements Trader {
MyTrader copyTrader() {
return new MyTrader(this);
}
...
}
Run Code Online (Sandbox Code Playgroud)
有时,您可能想要一般性地处理需要克隆的派生类型的集合Trader,然后返回正确类型的集合。为此,您可以以惯用的方式使用泛型:
public interface Trader<THIS extends Trader> {
THIS copyTrader();
...
}
public final class MyTrader implements Trader<MyTrader> {
public MyTrader copyTrader() {
return new MyTrader(this);
}
...
}
Run Code Online (Sandbox Code Playgroud)