gpt4 book ai didi

java - 在 Java 中实现 Clone 有什么替代方法吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:31:01 24 4
gpt4 key购买 nike

在我的 Java 项目中,我有一个包含各种类型交易者的 vector 。这些不同类型的交易者是交易者类的子类。现在,我有一个方法将 Trader 作为参数并将其存储在 vector 中 50 次左右。我遇到了问题,因为将同一对象存储 50 次只是存储同一对象的 50 个引用。我需要存储该对象的 50 个副本。我研究过如何实现 Clone ,但我不希望定义 Trader 类型的程序员不得不担心如何使他们的类可克隆。此外,正如 this page 所指出的那样,实现克隆会产生各种问题。我也不认为复制构造函数会起作用,因为如果我在 Trader 类中定义一个复制构造函数,它就不知道它正在复制的 Trader 类型,而只会创建一个通用的 Trader。我能做什么?

编辑:我并不是真的想要精确复制某个对象。我真正想做的是向 vector 中添加一定数量的交易者。问题是用户需要在参数中指定他想添加哪种类型的交易者。这是我正在尝试做的一个例子:(虽然我的语法完全是虚构的)

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);
}
...
}

关于java - 在 Java 中实现 Clone 有什么替代方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/791787/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com