假设我正在编写一个应当返回Map的方法。例如:
public Map<String, Integer> foo() {
return new HashMap<String, Integer>();
}
在考虑了一段时间后,我决定创建的这个 Map 没有修改的必要。因此,我想返回一个 ImmutableMap。 ImmutableMap。public Map<String, Integer> foo() {
return ImmutableMap.of();
}
我应该将返回类型保留为通用的 Map,还是应该指定我返回的是 ImmutableMap?
一方面,这正是接口创建的原因 —— 隐藏实现细节。
另一方面,如果我保留它如此,其他开发者可能会忽略这个对象是不可变的事实。因此,我不会实现不可变对象的主要目标;通过最小化可以更改的对象数量来使代码更加清晰。更糟糕的是,过一段时间,有人可能尝试更改此对象,而这将导致运行时错误(编译器不会警告)。
return ImmutableMap.of(somethingElse)
。相反,您将把ImmutableMap.of(somethingElse)
存储为字段,并仅返回此字段。所有这些都影响了这里的设计。 - Marco13