假设我正在写一个应该返回Map的方法。例如:
public Map<String, Integer> foo() {
return new HashMap<String, Integer>();
}
考虑了一段时间后,我决定创建该地图后就没有理由对其进行修改。因此,我想返回一个ImmutableMap。
public Map<String, Integer> foo() {
return ImmutableMap.of();
}
我应该将返回类型保留为通用Map,还是应该指定要返回ImmutableMap?
从一方面来说,这正是创建接口的原因。隐藏实施细节。
另一方面,如果我这样保留它,其他开发人员可能会错过这个对象是不可变的事实。因此,我不会实现不可变对象的主要目标。通过最小化可以更改的对象数量来使代码更清晰。更糟糕的是,过了一会儿,有人可能会尝试更改此对象,这将导致运行时错误(编译器不会对此发出警告)。