我有一些類似於下面的代碼,其中我有一個函數,它需要一個List [TypeA],我想能夠用List [TypeB]調用它,其中I有從TypeA到TypeB的隱式轉換。斯卡拉隱式轉換的泛型參數
我有一些示例代碼,當我用List inline調用方法時工作,但如果首先將列表分配給變量,則不起作用。
下面是一些代碼,工程:
class Person(val name: String)
implicit def stringToPerson(str: String) : Person = new Person(str)
def printAll(list: List[Person]) {
list.foreach(person => println("Person: " + person.name))
}
def callIt = {
printAll(List("1","2","3"))
}
不幸的是如果CALLIT看起來像這樣它不工作:
def callIt = {
val list = List("1","2","3")
printAll(list)
}
我得到它需要一個列表[人]但我的錯誤'給出一個列表[字符串]
在我的實際代碼中,我已經在其他地方定義了列表,所以它不會結束工作。我能做些什麼來讓它使用從String到Person的隱式轉換,爲什麼它能在第一種情況下工作,而不是在第二種情況下工作?
旁註:
val list: List[Person] = List("1","2","3")
但同樣,這不是我想要的:如果我指定列表的類型,並將它進行轉換,然後它也適用。
我真的需要提供從List [String]到List [Person]的隱式轉換嗎?
您應該將方法printAll定義爲:def printAll [T <%Person](ls:List [T])= {} – Eastsun