15

在我的 Java 程序中是否有使用 Collection.EMPTY_LIST 的泛型友好方式。

我知道我可以自己声明一个,但我只是想知道 JDK 中是否有办法做到这一点。

就像是users = Collections<User>.EMPTY_LIST;

4

3 回答 3

31

通过执行以下操作:

List<User> users = Collections.emptyList();

由于赋值的左侧,返回列表的类型Collections.emptyList();将被推断为 a 。String但是,如果您不想进行此推断,则可以通过执行以下操作显式定义它:

List<User> users = Collections.<User>emptyList(); 

在这个特定的例子中,这对大多数人来说可能看起来是多余的(事实上,我在野外看到的代码很少使用显式类型参数),但是对于具有签名的方法:void doStuff(List<String> users)它会非常干净使用显式类型参数调用doStuff()如下:

doStuff(Collections.<String>emptyList());
于 2008-10-03T23:18:55.023 回答
1
List<User> users = Collections.emptyList();
于 2008-10-03T23:20:24.383 回答
1

创建空列表后,我建议将其存储为常量,而不是每次都创建一个新列表。

Collections.emptyList()此外,使用vs也有性能优势new ArrayList(0),尽管差异可能很小。emptyList() 返回的列表被优化为不可变的空列表。例如,size() 方法只返回 0,而不是字段查找或 ArrayList 所做的任何事情。

于 2008-10-16T23:02:14.587 回答