除了用 Java 实现 Clone 之外,还有其他选择吗?

2023-11-21

在我的 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(使用前将#替换为@)

除了用 Java 实现 Clone 之外,还有其他选择吗? 的相关文章

  • 使用带有可变参数字符串的函数

    我正在研究带有可变参数的函数 并决定创建一个函数来创建带有参数的向量 我的功能是创建一个int矢量工作 vector
  • Spring MVC 应用程序可以是多线程的,即使它的 servlet 不是吗?

    当您谈论 Spring 应用程序是多线程时 您是否一定是指该应用程序中定义的 servlet 是否是多线程的 或者即使应用程序中的 servlet 不是多线程 Spring 应用程序也可以配置为多线程吗 不再支持单线程 servlet 它们
  • Java程序验证signtool签名的数字签名

    我已经使用 SignTool 对文件 exe 或 dll 不是 jar 文件 进行了数字签名 Signtool还可以验证数字签名 但我的要求是使用java程序检查由signtool签名的文件的数字签名 我在互联网上搜索但没有找到任何信息 您
  • Powermockito 可以在非最终具体类中模拟最终方法吗?

    假设我有一个非最终具体类 具有如下所示的最终方法 public class ABC public final String myMethod return test test 可以嘲笑吗myMethod 调用时返回其他内容junit usi
  • 通过代理从java发送电子邮件

    我使用 Java Mail API 来发送和接收电子邮件 现在我做这个项目的地方有一个代理服务器 我可以知道如何通过代理服务器从java发送电子邮件吗 请参阅此处的常见问题解答 http www oracle com technetwork
  • 在 IIS 中运行 Java Web 应用程序

    有人找到了在 IIS 中运行 Java Web 应用程序的方法吗 在我看来 编写一个将 Jetty 或自定义 servlet 容器与 IIS 集成的 ISAPI 插件 这个词正确吗 应该是完全可能的 这样做的好处是 许多优秀的高端 Java
  • GWT 代码服务器在使用 Maven 原型的新生成的项目中找不到模块

    我已经使用 GWT 和 eclipse 一段时间了 我想玩一下 Maven 和 GWT 插件 gwt maven plugin 在此输入链接描述 http mojo codehaus org gwt maven plugin 我尝试在 Ec
  • 检查 jar 是否从 shell 运行

    我有一个 java jar 程序 我试图在我的机器启动时运行它 理想情况下 shell 脚本将每 60 秒检查一次以确保 jar 正在运行 我如何检查 jar 是否在 centos 上运行 这似乎不起作用 我当前的 sh 文件 bin ba
  • 在 Java 中停止线程? [复制]

    这个问题在这里已经有答案了 我正在编写一段代码 该代码连接到服务器 使用该连接生成一堆线程并执行一堆 东西 在某些情况下 连接会失败 我需要停止一切并从头开始使用新对象 我想在对象之后进行清理 但在线程上调用 thread stop 但此方
  • 如何将选定的项目移动到列表顶部

    List
  • Mac OSX 上使用 Java 7 的透明 JFrame/JWindow

    我们有一个屏幕共享小程序 它打开 Swing JFrame 并使用 Robot 类捕获空框架后面的屏幕 用户可以单击框架并与小程序后面的任何内容进行交互 这在 Windows 上运行良好 并且用于 Apple 的 Java 版本 但对于 M
  • 查找前 N 个五边形数

    我必须找到第一个N pentagonal numbers 1 从 1 100 并每行显示 10 个 我必须使用getPentagonalNumber int n 方法也是如此 显然这就是它存在的原因 到目前为止 这是我的代码 package
  • 在 Android 上解析 RSS

    我有几个 RSS 源需要为我的应用程序进行解析 我按照这里的优秀教程进行操作 http w2davids wordpress com android rssatom feeds parsing with rome http w2davids
  • 使用java将文件从GCS存储桶传输到SFTP服务器

    我能够从 GCS 存储桶读取文件 但所有库都喜欢jsch将文件传输到 SFTP 服务器时会查找文件路径 而不是内存中的文件 我不想将从GCS读取的文件写入磁盘 如何将内存中的文件传输到SFTP 我假设您想上传内存中的数据 JSch 实际上有
  • 将带有 md5 消息摘要和 DESede/CBC/PKCS5Padding 的 3DES 加密的 java 代码转换为 python

    我有这个工作java代码 它使用3DES加密对密码进行加密 import java security MessageDigest import java util Arrays import java util Base64 import
  • 应返回带有 html 代码的字符串的支持 bean 属性返回空字符串

    我的支持 bean 中有一个返回 html 代码的属性 public String getHtmlPrevisualizar return Hello world 我想要做的是在 iframe 中显示这个 html 代码 我用 JavaSc
  • 如何克隆 bitbucket 存储库?

    一段时间后重新开始工作 我似乎不知道如何克隆 bitbucket 存储库 知道为什么我收到 未找到 错误吗 git clone verbose https bitbucket org helllamer mod openid Cloning
  • 访问 JAR 资源

    我有一个jar包含我想要分发的资源 主要是缓存 日志记录等配置 的文件 我对这些资源的相对路径有问题 所以我做了我在另一个 stackoverflow 问题中发现的问题 该问题说这是一种有效的方法 ClassInTheSamePackage
  • java有类似C#的属性吗? [复制]

    这个问题在这里已经有答案了 C 属性 我的意思是 get 和 set 方法 是一个非常有用的功能 java 也有类似 C 的属性吗 我的意思是我们如何在 java 中实现类似以下 C 代码的内容 public string Name get
  • 这种说法是否恰当。 if (0 != 表达式或变量) {} 在java中? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi

随机推荐

  • 在 Mac 上找不到 /dev/kvm

    所以我一直在我的 Mac 上使用 android studio 2 0 beta AVD 工作正常 但后来我注意到 android studio 现在无法启动 AVD 它说未找到 dev kvm 在 BIOS 安全设置中启用 VT x 确保
  • iOS如何检测用户是否更改了系统时间,如果没有将设备时间与服务器时间进行比较

    需求是必须检测iPhone的系统时间是否被用户手动更改 为此我用过 NSNotificationCenter defaultCenter addObserver self selector timeChangedNotification n
  • Visual Studio 2017 在应用程序设置中找不到连接字符串

    对于连接数据库和读取数据 我使用从 Web config 文件读取连接字符串的数据集 一切都在 Visual Studio 2013 中运行 但是当我在 Visual Studio 2017 中打开这个项目时 我无法配置 它错误 无法找到连
  • 如何从浏览器获取客户端的位置?

    我需要的是客户端的纬度 经度 通过浏览器 在网上找到了一些文章 在堆栈溢出本身中找到了一些 旧文章 从网络浏览器获取 GPS 位置 大约 18 个月前就有人回答了 想知道是否有其他 更有效 的方式从浏览器获取用户位置信息 到目前为止 找到了
  • C++ 成员函数具有相同的名称和参数,不同的返回类型

    如果我在类中定义具有相同名称和参数但返回类型不同的成员函数 这样是否有效 class Test public int a double b class Foo private Test t public inline Test getTes
  • 如何从代码隐藏访问 web.config 的 httpRuntime 部分?

    实际上我需要maxRequestLength的值httpRuntimeweb config 中的部分来检查发布文件的大小是否更大 最好的阅读方式是什么 先感谢您 你可以尝试类似的东西 HttpRuntimeSection section C
  • 如何在 Meteor 的 mongo 查询中指定读取首选项

    在 Meteor Mongo 中 如何在 Meteor Mongo Query 中将 readPref 指定为 Primary Secondary 希望下面的内容能让大家更好的理解Meteor和Mongo的关系 Meteor系列更舒适 Me
  • 对临时异常的 const 引用

    我们都知道这样的事情在 C 中是有效的 const T x T while T x T is not In 最近的一个问题谈话导致了这条规则 OP 发布了一些明显让人想起 UB 的代码 但我希望它的修改版本能够工作 这是修改版本 inclu
  • 如何将@DataJpaTest与多个数据源一起使用

    我尝试使用注释 DataJpaTest 编写集成测试 我有两个数据源 主要和次要 类配置 结果我有一个错误 expected single matching bean but found 2 primaryDataSource second
  • Windows 中的 CBT 挂钩...“CBT”代表什么?

    这是一个快速的 我开始使用hooks在 Windows 中 我注意到有一种称为 CBT 挂钩的挂钩类型 虽然我从文档中知道它是如何使用的 但 CBT 到底代表什么 我在文档中找到它时遇到了一些困难 CBT 代表 基于计算机的培训 除了启用教
  • CSS 100% 高度主体和元素

    我在使我的一个元素在 100 的整体布局中 100 时遇到问题 我尝试了不同的定位解决方案 最终要么隐藏内容浮动在底部页脚后面 要么内容最终位于页脚后面 并在页脚后面继续 这是我的页面布局
  • 在 Windows 远程服务器中运行命令并获取 C# .NET 中的控制台输出

    我有一个remote server name 视窗 username and password 使用 C Net 我想run a command在远程服务器上并取回console output 有没有办法在 C 中做到这一点 我能够使用运行
  • 从 Base64 编码图像获取尺寸

    我有一个 Angular 应用程序 我需要以下尺寸 Base64 编码的图像 我尝试将其加载到Image 但它只是说它是0x0 const image new Image image src data image jpeg base64 s
  • Zend Lucene 和 Java Lucene 的性能比较

    Zend Lucene和Java Lucene分别是用PHP和java构建的 而PHP语言的水平比java更高 只是想知道这两者在索引构建和数据搜索方面的性能差异有多大 让java创建并重建索引 然后让php使用索引是不是更有效 这是 Ze
  • SQL Server 字符串到 varbinary 的转换

    好的 问题是需要对 2 个表进行合并或联接 一种将文件内容存储为 image 类型或 varbinary max 另一种将文件内容存储为十六进制字符串 如果我将相同的内容上传到两个表中 字符串内容 字节数组到字符串 看起来像这样 appli
  • 三行或更多行文本的纯 CSS 省略号

    是否有一种仅 CSS 的方法 无 JavaScript jQuery 仅显示前两行 如果有三行或更多行 则隐藏多余的行并显示省略号 例如 我怎样才能拿这个小提琴 http jsfiddle net 0yyr3e63 并使它看起来像这样 Lo
  • JavaFX自定义列表视图

    我想问在 JavaFX 中使用自定义对象制作 ListView 的最佳方法 我想要一个每个项目如下所示的列表 我查了一下 发现大多数人都是用细胞工厂的方法来做的 还有其他办法吗 例如使用自定义 fxml 这是我的 fmxl 存档
  • 何时以及为何使用 mysqli_fetch_row、mysqli_fetch_object、mysqli_fetch_assoc、mysqli_fetch_array [重复]

    这个问题在这里已经有答案了 我在某种程度上理解之间的差异mysqli fetch row mysqli fetch object mysqli fetch assoc and mysqli fetch array 我的问题是它们是否如此相似
  • Android:蓝牙和手机扬声器之间切换音频不一致

    我的要求是根据用户选择在蓝牙和手机扬声器之间切换音频 下面是代码片段 AudioTrack for incoming audio to play as below int mMaxJitter AudioTrack getMinBuffer
  • 除了用 Java 实现 Clone 之外,还有其他选择吗?

    在我的 Java 项目中 我有一个由各种类型的交易者组成的向量 这些不同类型的交易者是 Trader 类的子类 现在 我有一个方法 它将 Trader 作为参数并将其存储在向量中 50 次左右 我遇到问题 因为存储同一个对象 50 次只是存