【发布时间】:2012-01-20 01:42:37
【问题描述】:
我有一些类似于以下的代码,其中我有一个采用 List[TypeA] 的函数,并且我希望能够使用 List[TypeB] 调用它,其中我有从 TypeA 到的隐式转换B型。
我有一些示例代码,当我使用内联列表调用方法时可以使用,但如果先将列表分配给变量,则无法使用。
下面是一些有效的代码:
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)
}
我得到一个错误,它需要一个 List[Person] 但我给出一个 List[String]
在我的实际代码中,我已经在其他地方定义了列表,因此它最终无法正常工作。我该怎么做才能让它使用从 String 到 Person 的隐式转换,为什么它在第一种情况下有效,而在第二种情况下无效?
旁注:如果我指定列表的类型并让它进行转换,它也可以工作:
val list: List[Person] = List("1","2","3")
但同样,这不是我想要的。
我真的需要提供从 List[String] 到 List[Person] 的隐式转换吗?
【问题讨论】:
-
您应该将 printAll 方法定义为: def printAll[T