加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

了解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])

如果一个类有一个反变量类型参数,如Growable[-A],声明之间有什么区别

def foo(bar: Growable[_])

def foo(bar: Growable[Nothing])

解决方法

当泛型参数有界时,确实会有所不同.例如,如果你有

class BoundedIterable[+A <: Something]
class BoundedGrowable[-A >: Something]

然后键入BoundedIterable [Any]和BoundedGrowable [Nothing]将是非法的.

我不知道是否有其他区别,但我可以肯定地说,你应该尽可能地选择无通配符的变体.那是因为实际上,声明方式类型方差的目的是摆脱通配符(这是一种使用方式的差异).当你说List [Any]你的意思是“任何东西”,但是当你说List [_]时,你的意思是“我们不知道什么”的列表.所以前者只是方式更清楚,即使在某些特定情况下它们可能相当.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读