在我的 Java 项目中,我有一个由各种类型的交易者组成的向量。这些不同类型的交易者是 Trader 类的子类。现在,我有一个方法,它将 Trader 作为参数并将其存储在向量中 50 次左右。我遇到问题,因为存储同一个对象 50 次只是存储 50参考同一个物体的。我需要存储 50 个copies的对象。我研究过实施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
需要克隆然后返回类型正确的集合。为此,您可以以惯用的方式使用泛型:
public interface Trader<THIS extends Trader> {
THIS copyTrader();
...
}
public final class MyTrader implements Trader<MyTrader> {
public MyTrader copyTrader() {
return new MyTrader(this);
}
...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)