В приведенном ниже коде у меня есть функция test
, которая принимает объект типа магнит, и у меня есть два неявных метода, преобразующих List [Int] в магнит, а другой - преобразование List [String] в магнит.
Если предполагается, что JVM потеряет типы в генериках из-за стирания типов во время выполнения, в моем коде ниже оба метода fromListInt
и fromListString
будут выглядеть как List [Any], верно?Потому что, когда я называю обе функции одинаковыми именами, я получаю сообщение об ошибке error: double definition:
, предполагающее, что оба List [Int] и List [String] считаются одинаковыми.
как в этом случае можно найти правильные неявные методы, когда япройти список (0) и список («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