在我的 Java 程序中是否有使用 Collection.EMPTY_LIST 的泛型友好方式。
我知道我可以自己声明一个,但我只是想知道 JDK 中是否有办法做到这一点。
就像是users = Collections<User>.EMPTY_LIST;
通过执行以下操作:
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());
List<User> users = Collections.emptyList();
创建空列表后,我建议将其存储为常量,而不是每次都创建一个新列表。
Collections.emptyList()
此外,使用vs也有性能优势new ArrayList(0)
,尽管差异可能很小。emptyList() 返回的列表被优化为不可变的空列表。例如,size() 方法只返回 0,而不是字段查找或 ArrayList 所做的任何事情。