2016-10-06 55 views
0

我有一個(Scala的)對象分層結構,如下所示:Scala的類型不匹配(Java的定義的類類是在類型T不變)

class Vehicle { 
    ... 
} 

class Car extends Vehicle { 
    ... 
} 

class Motorcycle extends Vehicle { 
    ... 
} 

等我有,需要一個方法中的一些輸入並返回Vehicle子類的類類型那就是「最適合它」:

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.") 
    } 
} 

這裏的問題是,我上classOf分配編譯器錯誤:

類型不匹配;找到:Classcom.me.myapp.model.Car required:Class [com.me.myapp.model.Vehicle] 注意:com.me.myapp.model.Car <:com.me.myapp.model.Vehicle,但Java定義的類類在類型T中是不變的。您可能希望研究通配符類型,如_ <:com.me.myapp.model.Vehicle。 (SLS 3.2.10)

有關這裏發生了什麼的任何想法,以及該修復程序是什麼?

+0

不,這個代碼你不能得到這個錯誤(除非你在「等」中的某個地方返回'Car'而不是'Class')。 –

回答

0

你可以嘗試改變方法的返回類型嗎?我只是用方法返回類型的Vehicle改變了VehicleType並且在我身上工作。

+0

對不起@ user3816201 - 這是我父母的複製粘貼錯誤。請參閱我的編輯,我的代碼*確實*返回'Vehicle'(而不是'VehicleType')後仍然抱怨上面列出的編譯器消息。 – smeeb

+0

我剛剛複製並粘貼。它已經在爲我工作。你在使用哪個版本的Scala? – user3816201