创建这样的界面是否有任何不好或错误,并在需要确保变量可克隆的地方使用它?
public interface PublicCloneable<I> {
public I clone();
}
与SO相关的问题是java的Cloneable接口被破坏了,我不明白为什么它没有像这样实现。
答案 0 :(得分:2)
你可以。创建新接口的主要问题是,您只能在您创建的新类上使用此接口,该接口将显式实现此接口。 Java库中的现有类无法实现此接口,因为您无法更改其代码。 (该接口并不神奇地适用于现有类型。)因此,只有在为所有希望使用的对象创建一系列自定义类时,它才有用,并且不使用标准库类。
答案 1 :(得分:1)
这很好,但您必须在方法中提供自己的克隆逻辑。
java.lang.Cloneable
的想法是将一个类标记为可克隆,并将克隆逻辑标记为由JVM处理。您没有使用Object.clone()
您可以从this answer中建议的机制中选择另一种克隆机制(或将您的界面与其他界面结合使用)。
答案 2 :(得分:1)
如果您想完全使用自己的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
}
}
我不确定它是否编译,但我尝试过,似乎没问题。
当然,里程可能会有所不同。