2017-07-24 70 views
3

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

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

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

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

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

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

+0

几乎肯定不是。你需要做第二件事。 –

+1

你也可能会发现有用的东西。 https://stackoverflow.com/a/9521003/3708426 –

回答

1

绝对不是 - 它应该被禁止(也就是说:没有任何选择给你作为用户来改变它)。这不是特定于您的图书馆,但通常返回Map而不是TreeMap的任何代码让'说。

看看它的其他方式,如果你返回Map用户不希望在其上调用ceilingEntry(可用在TreeMap,但不是在Map)通过引用的演员。

当通过它的Collectors.toXXX时,java-8会做同样的事情。例如,Collectors.toList明确指出:

对返回的列表的类型,可变性,可串行性或线程安全性没有保证。

这意味着他们被允许返回他们认为最合适的东西。

+0

好的,我明白了。只有当用户是唯一知道什么实施将会有益的用户时,我才会知道他们如何返回适当的东西。 –

+1

@AndreaBergonzo这个选择几乎总是在速度,内存等等之间进行一系列的妥协,甚至是一个内部数据结构,它可以更快地执行任务,就像java-8中使用'SpinedBuffer'的'toArray'一样...... – Eugene