3

我正在使用Immutables Java 库,如何强制执行特定的地图实现,而不必使用特定的引用?

@Immutable
public interface ConfigIF {
  Map<String, String> getOptions();
}

如果我使用上面的代码,具体MapLinkedHashMap.

@Immutable
public interface ConfigIF {
  TreeMap<String, String> getOptions();
}

如果我使用上面的代码,参考和实现都是TreeMap.

有没有办法指定Map为参考但强制执行TreeMap为具体类型?

4

1 回答 1

1

绝对不是——而且应该被禁止(也就是说:作为用户,你没有选择改变它)。这不是特定于您的库,而是通常返回 aMap而不是 let'say 的任何代码TreeMap

换个角度看,如果您返回一个Map用户,则不希望通过引用的强制转换来调用ceilingEntry它(在 中可用TreeMap,但在 中不可用Map)。

java-8 通过它的Collectors.toXXX. 例如Collectors.toList明确地说:

不保证返回的 List 的类型、可变性、可序列化性或线程安全性。

这意味着他们可以退回他们认为最合适的任何东西。

于 2017-07-24T20:49:11.710 回答