繁体   English   中英

Java公共克隆接口

[英]Java public clone interface

创建这样的接口并在需要确保变量可克隆的地方使用它有什么不好或错误吗?

public interface PublicCloneable<I> {
    public I clone();
}

SO中的问题与java的Cloneable接口损坏有关,我不明白为什么它没有像这样实现。

你可以。 创建一个新接口的主要问题是你只能在你创建的新类上使用这个接口,这些新类显式地实现了这个接口。 Java 库中的现有类无法实现此接口,因为您无法更改它们的代码。 (该接口不会神奇地应用于现有类型。)因此,仅当您为您希望使用的所有对象创建或创建一系列自定义类并且不使用标准库类时,它才有用。

这很好,但您必须在方法中提供自己的克隆逻辑。

java.lang.Cloneable 的想法是将java.lang.Cloneable标记为可克隆,克隆逻辑由 JVM 处理。 您不使用Object.clone()提供逐字段克隆

您可以从此答案中建议的克隆机制中选择另一种克隆机制(或将您的界面与另一种结合使用)。

如果你想 go 完全由你自己实现clone()应该没问题。 但是,如果您想在某个时候使用 Object.clone(),我建议

public interface PublicCloneable<I> extends Cloneable {
    public I clone();
}

和内部实现:

   public static class MyClass implements PublicCloneable<MyClass> {
     public MyClass clone() {
        try {
            return (MyClass)super.clone(); // Or do whatever you need here
        } catch (CloneNotSupportedException e) {
            // Always supported
        }
   }

我不确定它是否可以编译,但我试过了,看起来还可以。

当然,里程可能会有所不同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM