[英]Understanding scala's _ vs Any/Nothing
如果一個類有一個可變類型參數,如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[_]
你的意思是“我們不知道什么的列表”。 所以前者更清楚,即使它們在某些特定情況下可能是等同的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.