首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解scala的与任何/无

理解scala的与任何/无
EN

Stack Overflow用户
提问于 2013-03-09 11:50:15
回答 1查看 1.1K关注 0票数 15

如果类有一个协变量类型参数(如Iterable[+A] ),那么声明

代码语言:javascript
复制
def foo(bar: Iterable[_])

代码语言:javascript
复制
def foo(bar: Iterable[Any])

如果类具有逆变量类型参数(如Growable[-A] ),则声明

代码语言:javascript
复制
def foo(bar: Growable[_])

代码语言:javascript
复制
def foo(bar: Growable[Nothing])
EN

回答 1

Stack Overflow用户

发布于 2013-03-09 13:05:48

当泛型参数有界时,这确实有一点不同。例如,如果你有

代码语言:javascript
复制
class BoundedIterable[+A <: Something]
class BoundedGrowable[-A >: Something]

那么输入BoundedIterable[Any]BoundedGrowable[Nothing]将是非法的。

我不知道还有什么不同之处,但我可以肯定地说,只要有可能,您应该更喜欢无通配符的变体。这是因为,实际上,声明站点类型差异的目的就是消除通配符(这是使用站点差异的一种形式)。当你说List[Any]时,你指的是“任何事情的清单”,但当你说List[_]时,你指的是“我们--不知道--什么的清单”。所以前者就更清晰了,尽管它们在某些特定的情况下可能是等价的。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15310329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档