如果类有一个协变量类型参数(如Iterable[+A] ),那么声明
def foo(bar: Iterable[_])和
def foo(bar: Iterable[Any])如果类具有逆变量类型参数(如Growable[-A] ),则声明
def foo(bar: Growable[_])和
def foo(bar: Growable[Nothing])发布于 2013-03-09 13:05:48
当泛型参数有界时,这确实有一点不同。例如,如果你有
class BoundedIterable[+A <: Something]
class BoundedGrowable[-A >: Something]那么输入BoundedIterable[Any]和BoundedGrowable[Nothing]将是非法的。
我不知道还有什么不同之处,但我可以肯定地说,只要有可能,您应该更喜欢无通配符的变体。这是因为,实际上,声明站点类型差异的目的就是消除通配符(这是使用站点差异的一种形式)。当你说List[Any]时,你指的是“任何事情的清单”,但当你说List[_]时,你指的是“我们--不知道--什么的清单”。所以前者就更清晰了,尽管它们在某些特定的情况下可能是等价的。
https://stackoverflow.com/questions/15310329
复制相似问题