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