在下面的代码中,我有一个函数test
接收一个磁铁类型的对象,我有两个隐式方法将 List[Int] 转换为磁铁,另一个将 List[String] 转换为磁铁。
如果JVM由于运行时类型擦除而应该松散泛型中的类型,在我下面的代码中,方法fromListInt
和fromListString
看起来都像 List[Any] 对吗?因为当我用相同的名称命名两个函数时,我收到错误error: double definition:
提示 List[Int] 和 List[String] 被认为是相同的。
当我通过 List(0) 和 List("0") 时,在这种情况下如何找到正确的隐式方法?
scala> trait magnet {
| def printSomething: Unit
| }
defined trait magnet
scala> object magnet {
| implicit def fromListInt(future: List[Int]): magnet = {
| new magnet { def printSomething: Unit = println("test int") }
| }
| implicit def fromListString(future: List[String]): magnet = {
| new magnet { def printSomething: Unit = println("test string") }
| }
| }
defined object magnet
scala> def test(in: magnet): Unit = {
| in.printSomething
| }
test: (in: magnet)Unit
scala> import magnet._
import magnet._
scala> test(List(0))
test int
scala> test(List("0"))
test string