Collections.mptyList()是Collections.EMPTY_LIST的替代品吗?

时间:2017-09-27 21:01:45

标签: java collections

我是否可以安全地找到所有Collections.EMPTY_LIST并将其替换为Collections.emptyList(),或者是否有机会通过这样做来解决问题?同问Collections.EMPTY_SETCollections.EMPTY_MAP

我正在开发的项目是使用Java 8。

3 个答案:

答案 0 :(得分:3)

原则上是的,您可以在任何使用常量的地方使用该方法,但请记住 - 该方法是通用的,不会发出警告,而使用常量会引发"原始类型& #34;某些Java版本中的警告(但不是Java 8,请注意)。为了完整性'为了这个代码 - 请注意用于消除警告的注释:

@SuppressWarnings("rawtypes")
public static final List EMPTY_LIST = new EmptyList<>();

@SuppressWarnings("unchecked")
public static final <T> List<T> emptyList() {
    return (List<T>) EMPTY_LIST;
}

答案 1 :(得分:1)

如果您查看Collections的源代码,您会发现emptyList()只是EMPTY_LIST的通用包装,所以答案是肯定的。

public static final <T> List<T> emptyList() {
    return (List<T>) EMPTY_LIST;
}

emptyMap()emptySet()的实现使用相同的结构。

答案 2 :(得分:1)

Collections.EMPTY_LIST是一个不可变列表,但不是类型安全的。在哪里 Collections.emptyList()是不可变的,类型安全的。 Collections.emptyList()将是首选用法。