Java 中的强制可克隆接口

2023-11-29

我在 Java 中遇到了一个小问题。我有一个名为“可修改”的界面。实现此接口的对象是可修改的。

我还有一个 ModifyCommand 类(具有命令模式),它接收两个可修改对象(以进一步在列表中交换它们 - 这不是我的问题,我已经设计了该解决方案)。

ModifyCommand 类首先创建可修改对象的克隆。从逻辑上讲,我使可修改的接口扩展为可克隆的。然后,该接口定义了一个clone()方法,其实现类必须重新定义该方法。

然后,在ModifyCommand中,我可以执行以下操作:firstModifyingObject.clone()。我的逻辑是,实现可修改的类必须重新定义对象的克隆方法,因为它们将是可克隆的(这就是我想要做的)。

问题是,当我定义类实现 Modulated 并且我想重写clone() 时,它不会让我这样做,并指出 Object 类中的clone() 方法隐藏了可修改的方法。

我应该怎么办?我的印象是“我做错了”......

Thanks,

纪尧姆.

编辑:我想我会忘记clone()的事情。我将要么 a) 假设传递给可修改对象(实现接口)的对象已经被克隆,要么 b) 调用另一个方法,例如 copy(),这基本上会执行可修改对象的深层复制(或者通用解决方案可能会起作用......)。


如果您使用的是 java 1.5 或更高版本,您可以通过以下方式获得所需的行为并删除强制转换:

public interface Modifiable<T extends Modifiable<T>> extends Cloneable {
    T clone();
}

public class Foo implements Modifiable<Foo> {
    public Foo clone() { //this is required
        return null; //todo: real work
    }
}

由于 Foo 扩展了 Object,因此这仍然满足 Object 类的原始契约。由于 Modificable 接口施加的额外约束,未正确细化 clone() 方法的代码将无法编译。额外的好处是,调用代码不必强制转换克隆方法的结果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 中的强制可克隆接口 的相关文章

  • Java Try Catch Final 没有 Catch 的情况下会阻塞

    我正在审查一些新代码 该程序只有一个 try 和一个 finally 块 既然排除了 catch 块 那么如果 try 块遇到异常或任何可抛出的内容 它如何工作 它直接进入finally块吗 如果 try 块中的任何代码可以引发已检查异常
  • Android 2.2 SDK - Droid X 相机活动无法正常完成

    我注意到我在 Droid X 上调用的默认相机活动与我的 Droid 和 Nexus One 上的默认相机活动看起来不同 在 Droid 和 Nexus One 上选择 确定 后 活动将完成 Droid X 有一个 完成 按钮 它将带您返回
  • 如何使用 SimpleDateFormat 解析多种格式的日期

    我正在尝试解析文档中的一些日期 用户似乎以类似但不完全相同的格式输入了这些日期 以下是格式 9 09 9 2009 09 2009 9 1 2009 9 1 2009 尝试解析所有这些内容的最佳方法是什么 这些似乎是最常见的 但我想让我困扰
  • Grails 2.3.0 自动重新加载不起作用

    我最近将我们的项目升级到 grails 2 3 0 一切工作正常 除了每当我更改代码时自动重新加载都无法工作的问题 这包括所有项目工件 控制器 域 服务 gsps css 和 javascript 文件 我的旧版本 grails 可以正常工
  • 为什么 java 编译器不报告 Intellij 中多播表达式的未经检查的强制转换警告?

    为什么下面的代码没有报告 Intellij IDEA 的未经检查的警告jdk 1 8 0 121自从Supplier
  • Condition 接口中的 signalAll 与对象中的 notificationAll

    1 昨天我才问过这个问题条件与等待通知机制 https stackoverflow com questions 10395571 condition vs wait notify mechanism 2 我想编辑相同的内容并在我的问题中添加
  • Firestore - RecycleView - 图像持有者

    我不知道如何编写图像的支架 我已经设置了 2 个文本 但我不知道图像的支架应该是什么样子 你能帮我告诉我图像的文字应该是什么样子才能正确显示吗 holder artistImage setImageResource model getArt
  • 记录骆驼路线

    我的项目中有几个 Camel 上下文 如果可能的话 我想以逆向工程方式记录路线 因为我们希望保持与上下文相关的文档最新 最好的方法是什么 我们倾向于预先实际设计路线 并使用来自EIP book http www eaipatterns co
  • 如何在android中设置多个闹钟,在这种情况下最后一个闹钟会覆盖以前的闹钟

    我正在开发一个Android应用程序 用户可以在其中设置提醒时间 但我在以下代码中遇到一个问题 即最后一个警报会覆盖之前的所有警报 MainActivity java public void setreminders DatabaseHan
  • 如何将 android.net.Uri 转换为 java.net.URL? [复制]

    这个问题在这里已经有答案了 有没有办法从Uri to URL 我正在使用的库需要这个 它only接受一个URL但我需要在我的设备上使用图像 如果该方案的Uri is http or https new URL uri toString 应该
  • 在java中实现你自己的阻塞队列

    我知道这个问题之前已经被问过并回答过很多次了 但我只是无法根据互联网上找到的示例找出窍门 例如this http tutorials jenkov com java concurrency blocking queues html or t
  • Java 8 中函数式接口的使用

    这是来自的后续问题Java 8 中的 双冒号 运算符 https stackoverflow com questions 20001427 double colon operator in java 8其中 Java 允许您使用以下方式引用
  • Git 无法识别重命名和修改的包文件

    我有一个名为的java文件package old myfile java 我已经通过 git 提交了这个文件 然后我将我的包重命名为new所以我的文件在package new myfile java 我现在想将此文件重命名 和内容更改 提交
  • Java 数组的最大维数

    出于好奇 在 Java 中数组可以有多少维 爪哇language不限制维数 但是JavaVM规范将维度数限制为 255 例如 以下代码将无法编译 class Main public static void main String args
  • 如何将 Jfreechart(饼图)添加到 netbeans 的面板中

    我正在使用 netbeans gui 编辑器 并且正在尝试添加一个本身位于内部框架中的 Jfreechart 并且这个内部框架我想将其添加到面板中 正如您在此图中看到的那样 抱歉 我无法直接发布图像 因为我新手 http www flick
  • Espresso 和 Proguard 的 Java.lang.NoClassDefFoundError

    我对 Espresso 不太有经验 但我终于成功地运行了它 我有一个应用程序需要通过 Proguard 缩小才能处于 56K 方法之下 该应用程序以 3 秒的动画开始 因此我需要等到该动画结束才能继续 这就是我尝试用该方法做的事情waitF
  • 解析输入,除了 System.in.read() 之外不使用任何东西

    我很难找到具体的细节System in read 有效 也许有人可以帮助我 似乎扫描仪会更好 但我不允许使用它 我被分配了一个任务 我应该以 Boolean Operator Boolean 的形式读取控制台用户输入 例如T F 或 T T
  • 如何通过 Inno Setup for NetBeans 使用自定义 .iss 文件

    我将 Inno Setup 5 与 NetBeans 8 一起使用 并且我已经能够创建一个安装程序来安装该应用程序C users username local appname 但是我希望将其安装在C Programfiles 我如何在 Ne
  • 将图像添加到自定义 AlertDialog

    我制作了一个 AlertDialog 让用户可以从我显示的 4 个选项中选择一个 前 3 个让他们在单击号码时直接拨打号码 第 4 个显示不同的视图 现在看起来是这样的 由于第四个选项的目的是不同的任务 我想让它看起来不同 因为用户可能会感
  • 在哪里存储 Java 的 .properties 文件?

    The Java教程 http download oracle com javase tutorial essential environment properties htmlon using Properties 讨论如何使用 Prop

随机推荐

  • 找到图像的边缘并在 MATLAB 中裁剪它

    我有一个 RGB 图像 我已经扫描了图像 因此 该图像仅占 A4 尺寸纸张的一小部分 我想找到图像的边界并裁剪它 我可以使用 Sobel 等边缘检测运算符 但它们会检测图像中存在的所有边缘 我想要的只是图像的边框 此外 许多边缘检测函数 包
  • SQL ORDER BY on Update - 根据条件更新最后一条记录

    我正在尝试更新表 Log 的最后一条记录 具有最新 TimeAccessed 的字段 因为 TimeExited 为空 并且计算机名与 cm 参数相同 我有这个 但出现错误 sql 语句末尾缺少分号 怎么了 dbs Execute UPDA
  • 故事板prepareForSegue

    我有一个关于故事板转场的问题 平台是iOS 6 1 目标设备是 iPhone IDE是Xcode 4 5 2 我拥有的是 2 个 TableViewController 它们都有一个到同一个 ViewController 的 segue s
  • 如何使用 HttpWebRequest GET 方法与/ Content Type="application/json"

    这个非常简单 运行这个 Silverlight4 示例并注释掉 ContentType 属性 您将从我的服务以 xml 形式返回响应 现在取消注释该属性并运行它 您将得到一个 ProtocolViolationException 应该发生的
  • 将未定义数量的参数转发给另一个函数

    我将用一个接受任意数量函数的简单函数来解释这个问题 function abc args func get args Now lets use the first parameter in something In this case a s
  • 从 UIColor 创建 UIImage 用作 UIButton 的背景图像[重复]

    这个问题在这里已经有答案了 我正在创建这样的彩色图像 CGRect rect CGRectMake 0 0 1 1 UIGraphicsBeginImageContext rect size CGContextRef context UIG
  • Android Activity 作为内部类

    我正在尝试声明 AndroidActivity作为内部类 这Activity应该只由包含的类生成 并且需要访问它的一些私有方法 我真的不想公开的方法 当尝试生成它时 我得到了这个 java lang InstantiationExcepti
  • 使用 bash 用逗号分隔字段

    如何在字段之间放置逗号 输入数据 12123 QA test case 1 QA environment 12234 UAT test case 1 UAT environment 预期产出 12123 QA test case 1 QA
  • Puppeteer 选项卡仅在 youtube.com 上崩溃(噢,啪!STATUS_ACCESS_VIOLATION)

    我正在使用 puppeteer 从 Youtube 的搜索结果中获取屏幕截图 不幸的是 我无法让代码在此页面上运行 任何其他页面 还有 youtube 作品中的其他页面 当我使用 https www youtube com 作为网址时 我也
  • 使用 jquery 查找 ul li 列表中任何 li 块中最深的和最后一个 li?

    我有一个 HTML 列表 有几个嵌套的 ul 和 li 当我单击 li 时 我想找到该 li 标记中最深的项目 其中没有 ul 标记 并且 li 是该组的最后一项 例子例如 点击此链接 这是我的HTML code 这是我的方法 liclk
  • 带比较器的 Java 8 流过滤器

    我想过滤列表MyObject基于values场地 在这种情况下 如果有任何值MyObject getValues小于给定值value 则谓词为假 我还没有找到使用 Stream API 的方法 所以我尝试了ComparatorPredica
  • CodeSandbox.io 标签未加载图像

    我一直在尝试使用添加图像 img tag on CodeSandbox io 但是 每次我尝试添加它时 它都不会显示 只是默认为alt标签 显示山 我正在尝试将图像加载到与包含此 JS 文件的文件相同的文件夹中 下面是生成 HTML 的代码
  • 此集合实例上不存在属性 [title]

    我正在关注 Laracasts 的视频 基本模型 控制器 视图工作流程 我有一张表保存联系信息 CREATE TABLE about id int 10 UNSIGNED NOT NULL title varchar 500 COLLATE
  • Django 中的 DecimalField 验证

    我正在尝试验证DecimalField在姜戈中 在外壳中尝试 gt gt from django forms import DecimalField gt gt from django core validators import MaxV
  • WinSCP 命令行:在缓存错误中找不到主机密钥

    我第一次尝试从 WinSCP 命令行连接到 Unix 服务器 它关闭并出现以下错误 在缓存中找不到服务器的主机密钥 您无法保证 服务器是您认为的计算机 服务器的 rsa2 密钥指纹是 ssh rsa 1024 42 9e c7 f4 7f
  • 在 C++14 中使用 auto 作为返回值和参数类型

    在 Bjarne Stroustrup 的书 C 编程语言 的第四版中 我们读到 使用 auto 我们可以避免冗余和编写长类型名称 这在泛型编程中尤其重要 因为程序员很难知道对象的确切类型 并且类型名称可能很长 第 4 5 1 节 所以 了
  • iReport 中每个组的新页面

    我正在使用 iReport 5 6 0 我想为每个组创建新页面 例如我有桌子people i know Id Name State 1 Tom friends 2 Jim friends 3 Mike enemy 4 Alex friend
  • 使用 pyuic 将 .ui 转换为 .py?

    我正在使用 OSX 10 8 python 2 7 5 我刚刚使用 QtDesigner 构建了一个 GUI 并试图弄清楚如何在 Python 中使用它 我发现我必须使用 pyuic 以及如何在此处执行此操作 pyqt在mac osx雪豹中
  • asp.net通过kerberos将Windows身份验证集成到sql服务器

    请问有人可以提供一种简单 直接的方法来启用 ASP NET gt Kerberos gt Sql Server 吗 我们有客户端机器 gt 网络服务器 gt 数据库服务器 客户端坚持要求站点必须拉取 Windows 登录名而不是提示 因此需
  • Java 中的强制可克隆接口

    我在 Java 中遇到了一个小问题 我有一个名为 可修改 的界面 实现此接口的对象是可修改的 我还有一个 ModifyCommand 类 具有命令模式 它接收两个可修改对象 以进一步在列表中交换它们 这不是我的问题 我已经设计了该解决方案