当前位置: 首页 > 知识库问答 >
问题:

可以复制一张唱片吗?

水铭晨
2023-03-14

我在Google上找不到任何关于使用cloneable记录的资料。

我在想这样的事情:

record Foo() implements Cloneable {
    public Foo clone() {...}
}

是好事吗?我们是不是应该为了将来的枯萎病而避免它呢?

共有1个答案

司徒浩思
2023-03-14

除了可克隆的基本问题之外,还有一个不应该使记录可克隆的强大原因:

记录本质上是不可变的。不可变类的最大优点之一是,人们可以不再担心对象的同一性:任何两个具有相同值的对象都可以完全互换使用。JavaDoc有一个名为基于值的类的概念,它更进一步(不允许使用公共构造函数,使任何明确使用对象标识都是错误的),但它确实很好地描述了基本思想。

因此,创建一个记录的clone()只会生成第二个对象,该对象的行为应该与原始对象完全相同,并且不能改变其行为(因为记录是不可变的)。

这表明没有正当的理由来克隆()一个记录

为了完整起见:在记录中实现cloneable是可能的(但也不建议):

record Foo(String a) implements Cloneable {
  public Foo clone() {
    try {
      return (Foo) super.clone();
    } catch (CloneNotSupportedException e) {
      throw new RuntimeException("this can't happen", e);
    }
  }
}

运行此测试代码证明实际上创建了克隆:

Foo original = new Foo("bar");
Foo clonedFoo = original.clone();
System.out.println(original + " / " + clonedFoo);
System.out.println(System.identityHashCode(original) + " / " + System.identityHashCode(clonedFoo));

产生以下输出:

Foo[a=bar] / Foo[a=bar]
670700378 / 1190654826
 类似资料:
  • 问题内容: 我一直在尝试使用角材料制作一张网格的卡片。所以我正在使用指令md-grid-list和md-card。但是结果非常丑陋,我不确定要了解md-row- heigh(ratio)的工作原理,但我有文档说明,但说明并不多。 到目前为止,这是我一直在做的事情:http : //codepen.io/stunaz/pen/qdQwbq,我正在尝试构建一个响应式卡网格,甚至不确定md- grid-

  • 我试图写一个脚本,将信息从一张表复制到另一张表中的Google Sheets,作为每日更新。信息是按行显示的(例如。第5行有我想复制的所有信息,A列是输入的日期)如果条目上的日期(A列)与今天的日期不匹配,那么整行需要转移到另一张床单。 我无法将包含输入信息日期的单元格与今天的日期进行比较,然后捕获该单元格的行号,然后设置要复制的变量。 在新工作表上,它需要扫描下一个空行的范围,然后将信息粘贴到下

  • 我在两台服务器上使用带有兵马俑的分布式ehcache。在我的缓存管理器中,我有多个缓存。但是现在我有一个要求,每当一个元素被添加到1个服务器上的1个特定缓存中时,我都希望得到第二个服务器上的通知。我尝试使用缓存事件通知程序,但这可以在本地工作。你能不能帮我弄清楚我能做什么。我是否可以将复制机制与 terracotta 一起使用来解决此问题,因为通过在 1 个缓存上使用复制,我将在其他服务器上获取该

  • 我有一个工作簿,有7张工作表,但只有6张数据。所有这7张表都有相同的结构/标题,只是最后一张表(表7)是空白的。 我想编写一个代码,将A2:J15范围内的表1-6的内容复制到表7工作表中。我目前有一个代码,我一直在使用,以测试,看看它是否工作,但代码我只有副本和粘贴从一个工作表仅(见下文)。有什么建议吗? 在下面的工作表中,我有两个工作表,我希望数据来自其中,另一个是目标工作表,我希望数据去那里:

  • 问题内容: 是否可以有两个背景图像?例如,我想在顶部重复一幅图像(repeat-x),在整个页面中重复另一幅图像(repeat),其中整个页面中的一幅图像位于顶部重复的一幅图像的后面。 我发现通过设置html和body的背景,可以为两个背景图像实现所需的效果: 这是“好” CSS吗?有没有更好的方法?如果我要三个或更多背景图像怎么办? 问题答案: CSS3允许这种事情,它看起来像这样: 现在,所有

  • 试图将一个范围从Sheet1复制到31张表上的相同范围,但仍然得到“运行时错误1004:工作表类的粘贴方法失败”,调试器指示是问题所在。我可以复制到一张单张没有问题,但不能复制到多张。我试着到处找,但不知道问题是什么(可能也很简单)。