Java 这个类是不可变的吗?
这个类是不可变的吗 我大致上是在遵循“有效Java”、“第15项:最小化可变性”中的指导原则,因此该类并不是故意“最终”的Java 这个类是不可变的吗?,java,immutability,Java,Immutability,这个类是不可变的吗 我大致上是在遵循“有效Java”、“第15项:最小化可变性”中的指导原则,因此该类并不是故意“最终”的 public class Result<T extends Number> { private final Map<String, T> result; private Result(final Map<String, T> result) { this.result = result; }
public class Result<T extends Number> {
private final Map<String, T> result;
private Result(final Map<String, T> result) {
this.result = result;
}
public static final Result<? extends Number> of() {
return new Result<>(new LinkedHashMap<>());
}
/** Add or replace value. */
public Result<T> put(final String key, final T value) {
result.put(key, value);
return new Result<>(Collections.unmodifiableMap(result));
}
public T get(final String key) {
return Collections.unmodifiableMap(result).get(key);
}
@Override
public String toString() {
return result.toString();
}
}
公共类结果{
私人最终地图结果;
私有结果(最终映射结果){
this.result=结果;
}
公共静态最终结果否。put
方法应复制Map
,然后调用副本上的put
,并返回用复制的Map构建的新结果
/** Add or replace value. */
public Result<T> put(final String key, final T value) {
Map<T> copy = new LinkedHashMap<>(result);
copy.put(key, value);
return new Result<>(copy);
}
我认为没有,因为您用这行result.put(key,value)更改了result
map
No.put
方法会修改它。如果您希望它是不可变的,您只需要使新的结果
不同,而不是原始的。作为一个旁注,对另一个put
返回的结果调用put
会抛出一个异常。什么会让您认为它是不可变的?您怎么看相信immutable的定义是吗?你试过使用这个类吗?如果不强制转换,它就不太有用了。of()
方法返回一个结果注意,这个实现还依赖于Number的所有子类都是不可变的
或者进行深层次的copyThank@AlekseiBulgak,补充道。
public T get(final String key) {
//Relies on T being immutable
return result.get(key);
}