了解scala的_ vs Any / Nothing
发布时间:2020-12-16 09:15:47 所属栏目:安全 来源:网络整理
导读:如果一个类具有诸如 Iterable[+A] 的渐变类型参数,则声明之间是否有差异 def foo(bar: Iterable[_]) 和 def foo(bar: Iterable[Any]) ? 如果一个类有一个反变量类型参数,如 Growable[-A] ,声明之间有什么区别 def foo(bar: Growable[_]) 和 def foo(bar: Gr
如果一个类具有诸如
Iterable[+A] 的渐变类型参数,则声明之间是否有差异
def foo(bar: Iterable[_]) 和 def foo(bar: Iterable[Any]) ? 如果一个类有一个反变量类型参数,如 def foo(bar: Growable[_]) 和 def foo(bar: Growable[Nothing]) ? 解决方法
当泛型参数有界时,确实会有所不同.例如,如果你有
class BoundedIterable[+A <: Something] class BoundedGrowable[-A >: Something] 然后键入BoundedIterable [Any]和BoundedGrowable [Nothing]将是非法的. 我不知道是否有其他区别,但我可以肯定地说,你应该尽可能地选择无通配符的变体.那是因为实际上,声明方式类型方差的目的是摆脱通配符(这是一种使用方式的差异).当你说List [Any]你的意思是“任何东西”,但是当你说List [_]时,你的意思是“我们不知道什么”的列表.所以前者只是方式更清楚,即使在某些特定情况下它们可能相当. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |