假设我正在写一个应该返回一个Map的方法 。 例如: public Map<String, Integer> foo() { return new HashMap<String, Integer>(); } 经过一段时间的思考,我已经决定,一旦创build了这个地图,就没有理由去修改它。 因此,我想返回一个ImmutableMap 。 public Map<String, Integer> foo() { return ImmutableMap.of(); } 我应该离开返回types作为一个通用的地图,或者我应该指定我返回一个ImmutableMap? 从一方面来说,这正是为什么界面被创build的原因。 隐藏实现细节。 另一方面,如果我这样离开它,其他开发人员可能会错过这个对象是不可改变的事实。 因此,我不会实现不变的客体的主要目标; 通过最小化可以改变的对象的数量来使得代码更清楚。 甚至最糟糕的是,过了一段时间,有人可能会尝试更改此对象,这将导致运行时错误(编译器不会警告它)。