在Scala中定义一个函数,该函数将通配符的数组作为参数

时间:2013-03-30 19:51:02

标签: scala generics inheritance collections

我有一个看似非常简单的Scala问题让我发疯。这样:

class A
class B extends A
class C { def foo(a: Array[_ <: A]) { a(0) = a(1) }}

不编译。它说:

scala> class C { def foo(a: Array[_ <: A]) { a(0) = a(1) }}
<console>:8: error: type mismatch;
 found   : (some other)_$1(in method foo)
 required: _$1(in method foo)
       class C { def foo(a: Array[_ <: A]) { a(0) = a(1) }}

我想我理解;是因为不能保证“A”的所有元素都是同一类型的吗?无论如何要做这项工作,还是我只是在做些什么呢?

1 个答案:

答案 0 :(得分:4)

也许你的意思是

class C { def foo[T <: A](a: Array[T]) { a(0) = a(1) } }

这将让foo对A或其后代的数组进行操作,并且它将保持类型(因此,如果您只将其键入B,它将保持这种状态。)< / p>