关于Scala泛型的简单问题

时间:2011-03-18 17:40:09

标签: generics scala

X[Any]X[_]之间有什么区别?

让我们考虑一下,例如,下面的两个函数:

def foo(x:X[_]){}
def foo(x:X[Any]){}

上述声明之间的区别是什么?

2 个答案:

答案 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而不能使用_和反之亦然。