To ma niewielką różnicę, gdy ogólny parametr jest ograniczony. Na przykład, jeśli miał
class BoundedIterable[+A <: Something]
class BoundedGrowable[-A >: Something]
następnie wpisz BoundedIterable[Any]
i BoundedGrowable[Nothing]
byłoby nielegalne.
Nie wiem, czy jest jakakolwiek inna różnica, ale mogę powiedzieć na pewno, że w miarę możliwości powinieneś preferować wariant bez symboli wieloznacznych. Dzieje się tak, ponieważ w rzeczywistości celem wariancji typu deklaracji-miejsca jest pozbycie się symboli wieloznacznych (które są odmianą wariancji strony użytkowej). Kiedy mówisz List[Any]
masz na myśli "listę czegokolwiek", ale kiedy mówisz List[_]
, masz na myśli "listę nie-nie-wiem-co". Więc ta pierwsza jest po prostu bardziej przejrzysta, nawet jeśli mogą być one równoważne w konkretnym przypadku.
możliwy duplikat [scala - Any vs podkreślnik w generycznych] (http://stackoverflow.com/questions/15186520/scala-any-vs-underscore-in-generics) –
Nie dokładny duplikat, ale wystarczająco blisko. Pozwolę innym sądzić. –