簡體   English   中英

了解scala的_ vs Any / Nothing

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM