2013-03-30 39 views
2

我有一個看似非常簡單的Scala問題,這讓我瘋狂。這:在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」的所有元素都是同一類型?無論如何做這項工作,或者我只是做些什麼janky?

回答

4

也許你的意思是

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

這將讓foo對A或其後代的數組進行操作,並且它將保持該類型(因此,如果僅將它鍵入爲B,則它將保持這種狀態)。

+0

非常感謝您的幫助。這解決了這個問題,但問題實際上運行的更深,問題也是類似的,但我在這裏發佈了一個新問題:http://stackoverflow.com/questions/15723338/swapping-elements-of-two -arrays合階與 - 通配符型。我真的很感激你是否可以幫助那個人。 –

相關問題