2016-10-06 9 views
0

私はそうのような(スカラ)オブジェクト階層があります。Scalaの親と子オブジェクト間の型の不一致(Javaで定義されたクラスのクラスの型がTで不変である)

class Vehicle { 
    ... 
} 

class Car extends Vehicle { 
    ... 
} 

class Motorcycle extends Vehicle { 
    ... 
} 

などを私はいくつかを取るメソッドを持っていますここでの問題は、私はclassOf割り当てにコンパイルエラーを得ることである

def chooseVehicleType(fizz : String) : Class[_ <: Vehicle] = { 
    fizz match { 
     case "buzz"  => classOf[Car] 
     case "foo"  => classOf[Motorcycle] 
     // etc. 
     case _   => throw new UnsupportedOperationException(s"We don't support ${fizz} yet.") 
    } 
} 

入力し、「それに最適」である Vehicleサブクラスの クラス型を返します。

タイプの不一致。見つかった:Classcom.me.myapp.model.Car required:クラス[com.me.myapp.model.Vehicle] 注:com.me.myapp.model.Car <:com.me.myapp.model.Vehicle Java定義のクラスClassはT型では不変です。たとえば、_ <:com.me.myapp.model.Vehicleのようなワイルドカード型を調べることができます。 (SLS 3.2.10)

ここで何が起こっているのか、修正は何ですか?

+0

いいえ、このコードでは(「クラス」の代わりに「カー」を返す場合を除いて)このエラーは発生しません。 –

答えて

0

メソッドの戻り値の型を変更できますか?メソッドreturn型でVehicleTypeをVehicleに変更して私の仕事をしました。

+0

申し訳ありません@ user3816201 - それは私の親にコピーnの貼り付けエラーでした。私の編集を見てください。私のコードはafterallでVehicleを返します(VehicleTypeではありません)。上記のコンパイラメッセージにはまだ不満があります。 – smeeb

+0

私はちょうどコピーして貼り付けました。それはすでに私に取り組んでいます。どのバージョンのスカラーを使っていますか? – user3816201