2

非常に単純に見える 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」のすべての要素が同じ型であるという保証がないからですか? とにかくこれを機能させる方法はありますか、それとも私は何かぎこちないことをしているだけですか?

4

1 に答える 1

4

多分あなたが意味する

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

?

これにより、 foo は の配列Aまたはその子孫に対して操作できるようになり、型が維持されます (そのため、型をBonly として指定した場合はそのままになります)。

于 2013-03-30T19:57:53.973 に答える