Dex*_*ter 4 java interface guava
这是在创建接口/ API的上下文中.
最佳实践建议在接口中使用通用类型而不是特定类型 - 例如Map而不是HashMap.
最佳实践还建议使用不可变类型而不是可变类型.
因此,考虑到这两个建议(并且不考虑性能/内存占用,第三方库/依赖性和便利/功能),公共接口中的方法应该如下所示
public List<SomeClass> someMethod(...)
Run Code Online (Sandbox Code Playgroud)
或者更确切地说
public ImmutableList<SomeClass> someMethod(...)
Run Code Online (Sandbox Code Playgroud)
当Guava人员讨论过这个问题时,我们已经说过:
API交换的类型的基本建议是:选择仍然传达相关语义信息的最通用类型.
我认为ImmutableCollection所做的三个语义保证几乎在任何情况下都与返回值极为相关(这三个是不变性,缺少空元素和保证迭代顺序).所以我几乎总是会返回ImmutableSet,而不是Set.
我们真的希望人们将ImmutableSet等视为每个重要意义上的接口.它们没有两个原因:不变性保证的可靠性,以及Java在JDK 8之前不允许在接口上使用静态方法的事实,并且为了方便我们希望它们在那里.
大多数人认为ImmutableList是出于这个原因的实现,但实际上有几种到几种不同的实现.你只是看不到它们.