Es macht einen kleinen Unterschied, wenn der generische Parameter begrenzt ist. Zum Beispiel hatte, wenn Sie
class BoundedIterable[+A <: Something]
class BoundedGrowable[-A >: Something]
dann BoundedIterable[Any]
geben und BoundedGrowable[Nothing]
wäre illegal.
Ich weiß nicht, ob es einen anderen Unterschied gibt, aber ich kann mit Sicherheit sagen, dass Sie die Wildcard-lose Variante bevorzugen sollten, wo immer es möglich ist. Das liegt daran, dass der eigentliche Zweck der Deklaration-Site-Typ-Varianz darin besteht, Wildcards (die eine Form der Nutzung-Site-Varianz sind) loszuwerden. Wenn du List[Any]
sagst, meinst du "Liste von allem", aber wenn du List[_]
sagst, dann meinst du "Liste von wir-weiß-nicht-was". Das erstere ist also viel klarer, obwohl es in einem bestimmten Fall gleichwertig sein kann.
möglich Duplikat von [Scala - Any vs Unterstrich in Generika] (http://stackoverflow.com/questions/15186520/scala-any-vs-underscore-in-generics) –
Nicht ein genaues Duplikat, aber nahe genug. Ich lasse andere urteilen. –