我正在使用Immutables Java库,如何强制执行特定的地图实现,而不必使用特定的引用?
Date
如果我使用上面的代码,则具体@Immutable
public interface ConfigIF {
Map<String, String> getOptions();
}
为Map
。
LinkedHashMap
如果我使用上面的代码,引用和实现都是@Immutable
public interface ConfigIF {
TreeMap<String, String> getOptions();
}
。
有没有办法指定TreeMap
作为参考,但强制Map
作为具体类型?
答案 0 :(得分:1)
绝对不是 - 它应该被禁止(也就是说:作为用户改变它没有给你选项)。这不是特定于您的库,但通常返回Map
代替TreeMap
的任何代码都会让我们说。
另一方面,如果您返回Map
用户,则不希望在其上调用ceilingEntry
(可在TreeMap
中找到,但不在Map
中。通过参考演员。
java-8通过它Collectors.toXXX
做同样的事情。例如Collectors.toList
明确说:
对返回的List的类型,可变性,可序列化或线程安全性没有任何保证。
这意味着他们可以返回他们认为最合适的任何内容。