Java 这个类是不可变的吗?

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; }

这个类是不可变的吗

我大致上是在遵循“有效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 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);
}