与 Collections.emptyList() 相比,Collections.EMPTY_LIST **失败**吗?
Can Collections.EMPTY_LIST **fail** compared to Collections.emptyList()?
我知道之前有人问过类似的问题,但我没有找到任何关于为什么类型安全(由方法提供)在空的不可变列表中很重要的解释。
尽管我总是努力做到 type/generics 正确,但我想了解使用常量会导致该方法可以避免的错误的真实情况。
我发现的最糟糕的后果是该方法避免了 a compilation error in specific cases 但除此之外它只是避免了警告,这(根据我的理解)在实践中并不是什么大问题:虽然我不知道JVM 中的确切区别,我大致知道泛型在编译时使用,然后类型被擦除并替换为强制转换。
所以,总结一下,任何 EMPTY_LIST 是坏主意 (TM) 的例子?
你说得对,使用 EMPTY_LIST
本身 没有风险。但是,您会收到警告。忽略警告是一种风险,因为有一天您肯定会忽略一个不想被忽略的警告。
你可以 @SuppressWarnings
,但你要么将注释放在你的方法上(甚至 class),然后你就回到了第一点。
或者您创建一个局部变量并对其进行注释。这很冗长。
或者您创建一个返回字段并对其进行注释的微型方法。猜猜 Collections.emptyList()
是做什么的。
我知道之前有人问过类似的问题,但我没有找到任何关于为什么类型安全(由方法提供)在空的不可变列表中很重要的解释。
尽管我总是努力做到 type/generics 正确,但我想了解使用常量会导致该方法可以避免的错误的真实情况。
我发现的最糟糕的后果是该方法避免了 a compilation error in specific cases 但除此之外它只是避免了警告,这(根据我的理解)在实践中并不是什么大问题:虽然我不知道JVM 中的确切区别,我大致知道泛型在编译时使用,然后类型被擦除并替换为强制转换。
所以,总结一下,任何 EMPTY_LIST 是坏主意 (TM) 的例子?
你说得对,使用 EMPTY_LIST
本身 没有风险。但是,您会收到警告。忽略警告是一种风险,因为有一天您肯定会忽略一个不想被忽略的警告。
你可以 @SuppressWarnings
,但你要么将注释放在你的方法上(甚至 class),然后你就回到了第一点。
或者您创建一个局部变量并对其进行注释。这很冗长。
或者您创建一个返回字段并对其进行注释的微型方法。猜猜 Collections.emptyList()
是做什么的。