多个实例而不是接口的副本

时间:2018-11-02 11:25:03

标签: java

所以这可能有点难以解释...

此刻我正在这样做:

SomeInterface xyz1 = SomeInterface.method(data);
SomeInterfaceCopy xyz2 = SomeInterfaceCopy.method(data);

我在这里所做的是精确复制 “ SomeInterface”的每个类和接口, 因为我需要两个相同的“实例” 界面。

我想做的是这样的:

SomeInterface xyz1 = SomeInterface.method(data);
SomeInterface xyz2 = SomeInterface.method(data);

这将使我拥有两个以上的“实例”, 这是不可能的,因为xyz1和xyz2基本上是 复制(同一实例中的所有对象) 而不是实例。

我将如何实现这一目标?

谢谢:)

编辑:谢谢@PeterLawrey,很遗憾,它不能解决我的特定问题,但这是正确的答案

2 个答案:

答案 0 :(得分:1)

假设您有两个相同的界面,但是由于某些原因,您不能轻易地删除重复的界面而不使用它。

SomeInterface xyz1 = SomeInterface.method(data);
SomeInterfaceCopy xyz2 = SomeInterfaceCopy.method(data);

最简单的更改是使副本继承自原始副本。

interface SomeInterfaceCopy extends SomeInterface {

这意味着您可以写

SomeInterfaceCopy xyz2 = SomeInterfaceCopy.method(data);

SomeInterface xyz2 = SomeInterfaceCopy.method(data);

如果您根本无法更改代码,而是想要逐字段逐个复制,则可以查看原始对象的序列化并将其反序列化为目标类型。

  

能举个两次打电话给我的例子吗?

class SomeInterfaceImpl implements SomeInterface,您可以使用创建两个实例

SomeInterface xyz1 = new SomeInterfaceImpl(); // one instance
SomeInterface xyz2 = new SomeInterfaceImpl(); // 2nd instance.

答案 1 :(得分:1)

制作对象深层副本的另一种方法是使用该类中的自己的深层副本构造函数创建该类的新实例。因此,对于复制构造函数:

public Class(Class class) {
 this(class.getFirstProp(),customer.getSecondProp());
}

然后像这样使用它:

Class a = new Class(data.firstvalue, data.secondvalue);
Class b = new Class(a);