X[Any]
和X[_]
之间有什么区别?
让我们考虑一下,例如,下面的两个函数:
def foo(x:X[_]){}
def foo(x:X[Any]){}
上述声明之间的区别是什么?
答案 0 :(得分:9)
第一种是存在型,第二种是普通型。第一种语法实际上意味着:
def foo(x:X[t] forSome { type t }){}
这意味着x
的类型为X[t]
,其中t
可以是任何未指定的type t
。
直观地,X[_]
表示X
的类型参数无关紧要,而X[Any]
表示必须Any
。
答案 1 :(得分:-1)
区别在于微不足道
scala> class X[T]
defined class X
scala> def type_of[T](x: X[T])(implicit m: Manifest[T]) = m.toString
type_of: [T](x: X[T])(implicit m: Manifest[T])java.lang.String
scala> val x1: X[Any] = new X
x1: X[Any] = X@1a40cfc
scala> val x2: X[_] = new X
x2: X[_] = X@29d838
scala> type_of(x1)
res10: java.lang.String = Any
scala> type_of(x2)
res11: java.lang.String = _ <: Any
我不能说出一种情况,当你可以使用Any而不能使用_和反之亦然。