我是否可以安全地找到所有Collections.EMPTY_LIST
并将其替换为Collections.emptyList()
,或者是否有机会通过这样做来解决问题?同问Collections.EMPTY_SET
和Collections.EMPTY_MAP
。
我正在开发的项目是使用Java 8。
答案 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()将是首选用法。