Java 公共克隆接口
创建这样的接口并在我需要确保变量可克隆的地方使用它有什么坏处或错误吗?
public interface PublicCloneable<I> {
public I clone();
}
SO 中的问题与 java 的 Cloneable 接口已损坏这一事实相关,我不明白为什么它不这样实现。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
你可以。创建新接口的主要问题是您只能在您创建的显式实现此接口的新类上使用此接口。 Java 库中的现有类无法实现此接口,因为您无法更改它们的代码。 (该接口不会神奇地应用于现有类型。)因此,只有当您为您期望使用的所有对象创建自定义类系列并且不使用标准库类时,它才有用。
You can. The main problem with creating a new interface is that you can only use this interface on new classes that you create, which explicitly implement this interface. Existing classes in the Java library cannot implement this interface, since you can't change their code. (The interface does not magically apply to existing types.) So it's only useful if you kind of create of create a family of custom classes for all the objects you expect to use, and don't use the standard library classes.
如果您想完全使用自己的
clone()
实现,那应该没问题。但是,如果您想在某个时候使用 Object.clone(),我建议在实现内部:
我不确定它是否可以编译,但我尝试过,看起来没问题。
当然,里程可能会有所不同。
If you want to go with entirely your own implementation of
clone()
it should be OK. However, if you want to use Object.clone() at some point, I'd recommendand inside implementation:
I was not sure if it compiles, but I tried and it seems ok.
Mileage can vary, of course.
这很好,但您必须在方法内提供您自己的克隆逻辑。
java.lang.Cloneable 的思想是将一个类标记为可克隆,并由 JVM 处理克隆逻辑。您不使用
Object.clone()
提供逐字段克隆您可以从 这个答案。
This is fine, but you will have to provide your own cloning logic inside the method.
The idea of
java.lang.Cloneable
is to mark a class as cloneable and the cloning logic to be handled by the JVM. You don't provide field-by-field cloning withObject.clone()
You can pick another cloning mechanism (or use your interface in combination with another one) from the ones suggested in this answer.