请考虑以下示例:
public final class ImmutableWrapper<T extends Number> {
private final T value;
public ImmutableWrapper(T value) {
// a subclass of Number may be mutable
// so, how to defensively copying the value?
this.value = value;
}
public T getValue() {
// the same here: how to return a copy?
return value;
}
}
Run Code Online (Sandbox Code Playgroud)
为了使这个类不可变,我必须防御性地复制传递给构造函数的任何可变参数,并创建由公共方法返回的内部可变对象的副本.
这可能吗?如果没有,是否有任何解决方法?
由于所有Numbers 都是Serializable您可以通过它们创建副本serializing/deserializing。
也许你可以使用 apache commons-lang 的SerializationUtils.clone(Serializable).
public final class ImmutableWrapper<T extends Number> {
private final T value;
public ImmutableWrapper(T value) {
// a subclass of Number may be mutable
// so, how to defensively copying the value?
this.value = SerializationUtils.clone(value);
}
public T getValue() {
// the same here: how to return a copy?
return SerializationUtils.clone(value);
}
}
Run Code Online (Sandbox Code Playgroud)
或者如果您想自己实现它,请查看:
| 归档时间: |
|
| 查看次数: |
117 次 |
| 最近记录: |