Java 多个实例而不是接口的副本
所以这可能有点难以解释 目前,我这样做:Java 多个实例而不是接口的副本,java,Java,所以这可能有点难以解释 目前,我这样做: SomeInterface xyz1 = SomeInterface.method(data); SomeInterfaceCopy xyz2 = SomeInterfaceCopy.method(data); 我在这里所做的就是复制一份 “SomeInterface”的每个类和接口, 因为我需要两个相同的“实例” 接口 我想做的是这样的: SomeInterface xyz1 = SomeInterface.method(data); SomeInt
SomeInterface xyz1 = SomeInterface.method(data);
SomeInterfaceCopy xyz2 = SomeInterfaceCopy.method(data);
我在这里所做的就是复制一份
“SomeInterface”的每个类和接口,
因为我需要两个相同的“实例”
接口
我想做的是这样的:
SomeInterface xyz1 = SomeInterface.method(data);
SomeInterface xyz2 = SomeInterface.method(data);
这将允许我有两个以上的“实例”,
不可能使用atm,因为xyz1和xyz2基本上是
复制(同一实例中的所有对象)
而不是实例
我将如何实现这一目标
谢谢:)
编辑:谢谢@PeterLawrey,不幸的是,它没有解决我的具体问题,但这是正确的答案假设您有两个相同的接口,但由于某些原因,您不能轻松删除重复的接口而不使用它
SomeInterface xyz1 = SomeInterface.method(data);
SomeInterfaceCopy xyz2 = SomeInterfaceCopy.method(data);
最简单的更改是使副本从原始副本继承
interface SomeInterfaceCopy extends SomeInterface {
这意味着你可以写
SomeInterfaceCopy xyz2 = SomeInterfaceCopy.method(data);
或
如果您根本无法更改代码,而是希望一个字段一个字段地进行深度复制,那么可以查看原始对象的序列化,并将其反序列化为目标类型
你能举一个例子,打两次电话给new吗
假设类SomeInterfaceImpl实现SomeInterface
,您可以使用
SomeInterface xyz1 = new SomeInterfaceImpl(); // one instance
SomeInterface xyz2 = new SomeInterfaceImpl(); // 2nd instance.
假设您有两个相同的接口,但是由于某些原因,您不能轻松地删除重复的接口而不使用它
SomeInterface xyz1 = SomeInterface.method(data);
SomeInterfaceCopy xyz2 = SomeInterfaceCopy.method(data);
最简单的更改是使副本从原始副本继承
interface SomeInterfaceCopy extends SomeInterface {
这意味着你可以写
SomeInterfaceCopy xyz2 = SomeInterfaceCopy.method(data);
或
如果您根本无法更改代码,而是希望一个字段一个字段地进行深度复制,那么可以查看原始对象的序列化,并将其反序列化为目标类型
你能举一个例子,打两次电话给new吗
假设类SomeInterfaceImpl实现SomeInterface
,您可以使用
SomeInterface xyz1 = new SomeInterfaceImpl(); // one instance
SomeInterface xyz2 = new SomeInterfaceImpl(); // 2nd instance.
创建对象的深度副本的另一种方法是使用该类中自己的深度副本构造函数创建该类的新实例。因此,对于复制构造函数:
public Class(Class class) {
this(class.getFirstProp(),customer.getSecondProp());
}
然后像这样使用它:
Class a = new Class(data.firstvalue, data.secondvalue);
Class b = new Class(a);
创建对象的深度副本的另一种方法是使用该类中自己的深度副本构造函数创建该类的新实例。因此,对于复制构造函数:
public Class(Class class) {
this(class.getFirstProp(),customer.getSecondProp());
}
然后像这样使用它:
Class a = new Class(data.firstvalue, data.secondvalue);
Class b = new Class(a);
有。我不知道你在问什么。如果你不想要两个相互复制的不同接口,不要使用复制的接口,只使用原始接口。问题是,其中的所有对象和数据,当我使用第二个示例时也是一样的如果你不想结果相同,你需要更改方法的实现,而不是API。我猜你想要一个深度副本而不是浅层副本?这是有原因的。我不知道你在问什么。如果你不想要两个相互复制的不同接口,不要使用复制的接口,只使用原始接口。问题是,其中的所有对象和数据,当我使用第二个示例时也是一样如果你不想结果相同,你需要更改方法的实现,而不是API。我猜你想要的是深度副本而不是浅层副本?谢谢,非常接近。。但它不允许我使用xyz3或4,也不允许我需要多少实例或深度副本。@heycaptain是的,你需要做一些事情来删除所有似乎没有给你带来任何好处的重复,或者你需要做一个深度副本。非常感谢你花时间发布这么多内容。我实现了复制,作为获取两个接口实例的快速而肮脏的方式。然而,在不久的将来,将需要得到两个以上。有没有办法生成实例的克隆?(没有找到任何内容)@heycaptain您可以使用
clone()
,但是您必须实现Cloneable
并覆盖它以获得深度副本。@heycaptain可以通过在实现它的具体类上调用两次new
来拥有两个接口实例。不需要复制界面,因为它是一个模板。谢谢,非常接近。。但它不允许我使用xyz3或4,也不允许我需要多少实例或深度副本。@heycaptain是的,你需要做一些事情来删除所有似乎没有给你带来任何好处的重复,或者你需要做一个深度副本。非常感谢你花时间发布这么多内容。我实现了复制,作为获取两个接口实例的快速而肮脏的方式。然而,在不久的将来,将需要得到两个以上。有没有办法生成实例的克隆?(没有找到任何内容)@heycaptain您可以使用clone()
,但是您必须实现Cloneable
并覆盖它以获得深度副本。@heycaptain可以通过在实现它的具体类上调用两次new
来拥有两个接口实例。不需要复制接口,因为它是一个模板。它是一个接口,不是一个类。它是一个接口,不是一个类