当前位置: 首页 > 面试题库 >

Java中的强制性可克隆接口

督烨赫
2023-03-14
问题内容

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

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

ModifyCommand类从制作可修改对象的克隆开始。从逻辑上讲,我使我的Modifiable接口扩展了Cloneable。然后,接口定义一个clone()方法,其实现类必须重新定义。

然后,在ModifyCommand中,我可以执行以下操作:firstModifiableObject.clone()。我的逻辑是,实现Modifiable的类将必须从Object重新定义clone方法,因为它们将是Cloneable的(这就是我想要做的)。

问题是,当我定义类实现Modifiable时,并且我想覆盖clone()时,它不会让我说,这表明Object类中的clone()方法对Modifiable隐藏了一个。

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

谢谢,

纪尧姆。

编辑:它认为我会忘记clone()的东西。我将要么a)假定已经克隆了传递给Modifiable对象(实现接口)的对象,要么b)制作了另一个称为copy()的方法,该方法基本上将对Modifiable对象进行深拷贝(也许通用解决方案会起作用…)。


问题答案:

如果您使用的是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类的原始协定。由于Modifiable接口施加了额外的约束,因此无法正确优化clone()方法的代码将无法编译。另外,调用代码不必强制转换clone方法的结果。



 类似资料:
  • 问题内容: 如果我有: 然后执行: 我得到了一个浅表副本,而无需编写任何代码,就像实现接口时通常需要做的那样。 我的理解是,接口的功能必须由实现它的类来填充,并且没有实现(根据文档,“类Object本身并不实现接口Cloneable”) 那么我的浅表克隆从哪里来?如果没有实现,实现的代码在哪里?我很困惑。 问题答案: 使用克隆时要 非常小心 。实际上,我会完全避免。我 从来 不需要它。但是…话说回

  • 我们解决什么问题 我们知道,JDK中的Cloneable接口只是一个空接口,并没有定义成员,它存在的意义仅仅是指明一个类的实例化对象支持位复制(就是对象克隆),如果不实现这个类,调用对象的clone()方法就会抛出CloneNotSupportedException异常。而且,因为clone()方法在Object对象中,返回值也是Object对象,因此克隆后我们需要自己强转下类型。 泛型克隆接口

  • 问题内容: 在游戏中,我有一个玩家列表,我们这样说: 我想让每个玩家与其他玩家互动,所以我写了两个嵌套循环: 由于我只希望每对玩家互动一次,因此我想在外循环的当前玩家之后与该玩家开始内循环。所以我想克隆迭代器,但是不能编译。 那么,我该怎么办呢? 问题答案: 将执行以下操作: 它依靠的能力从给定位置开始,并且还知道其当前位置。

  • 本文向大家介绍如何复制或克隆Java ArrayList?,包括了如何复制或克隆Java ArrayList?的使用技巧和注意事项,需要的朋友参考一下  java.util.ArrayList类的 clone()方法返回此ArrayList实例的浅表副本(即,不复制元素本身)。使用此方法,可以将一个数组列表的内容复制到另一个数组列表。 示例 输出结果

  • 问题内容: 我一直在寻找一些讲解Java的教程,但没有获得任何良好的链接,无论如何,Stack Overflow变得越来越明显。 我想知道以下内容: 意味着我们可以通过实现接口来获得对象的克隆或副本。这样做的优点和缺点是什么? 如果对象是复合对象,则如何进行递归克隆? 问题答案: 你应该了解的第一件事-不要使用它。 正确地进行克隆非常困难,而且付出的努力是不值得的。 而不是使用其他一些选项,例如或

  • 本文向大家介绍深入理解Java中的克隆,包括了深入理解Java中的克隆的使用技巧和注意事项,需要的朋友参考一下 前言 Java克隆(Clone)是Java语言的特性之一,但在实际中应用比较少见。但有时候用克隆会更方便更有效率。 对于克隆(Clone),Java有一些限制:       1、被克隆的类必须自己实现Cloneable 接口,以指示 Object.clone() 方法可以合法地对该类实例