15

クラスに などの共変型パラメーターIterable[+A]がある場合、宣言と宣言の間に違いはありますか

def foo(bar: Iterable[_])

def foo(bar: Iterable[Any])

?


クラスに などの反変型パラメーターGrowable[-A]がある場合、宣言する間に違いはありますか

def foo(bar: Growable[_])

def foo(bar: Growable[Nothing])

?

4

1 に答える 1

5

ジェネリック パラメーターがバインドされている場合は、少し違いがあります。たとえば、

class BoundedIterable[+A <: Something]
class BoundedGrowable[-A >: Something]

BoundedIterable[Any]と入力BoundedGrowable[Nothing]すると違法になります。

他に違いがあるかどうかはわかりませんが、可能な限りワイルドカードのないバリアントを好むべきだと言えます。これは、実際には、宣言サイト タイプの差異の目的そのものが、ワイルドカード (使用サイトの差異の一種) を取り除くことだからです。あなたが言うList[Any]ときは「何かのリスト」を意味しますが、それを言うときList[_]は「私たちが知らないもののリスト」を意味します. したがって、特定のケースでは同等である可能性がありますが、前者の方がはるかに明確です。

于 2013-03-09T13:05:48.393 に答える