我有一个看似非常简单的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”的所有元素都是同一类型的吗?无论如何要做这项工作,还是我只是在做些什么呢?
答案 0 :(得分:4)
也许你的意思是
class C { def foo[T <: A](a: Array[T]) { a(0) = a(1) } }
这将让foo对A
或其后代的数组进行操作,并且它将保持类型(因此,如果您只将其键入B
,它将保持这种状态。)< / p>