У меня есть два определения foo
, и одно из них более предположительно
def foo(f: java.util.function.ToIntFunction[String]) = println("foo1")
def foo[T](f: String=>T) = println("foo2")
//def foo[T](f: String=>T)(implicit d: DummyImplicit) = println("foo2") //Does not work either
foo({_: String => 1}) //Should pick foo1, but gives error instead
Ошибка:
error: ambiguous reference to overloaded definition,
both method foo in object Main of type [T](f: String => T)Unit
and method foo in object Main of type (f: java.util.function.ToIntFunction[String])Unit
Я также попробовал трюк DummyImplicit
но это все равно дает ту же ошибку.Как я могу добиться перегрузки времени компиляции, когда Int
представляет без отражения?
Я использую Scala 2.12 с поддержкой типа SAM.
Редактировать
Я надеюсь получить решение, которое не ограничивается использованием Java-конвертеров, поскольку интерфейс ToIntFunction можно заменить на черту Scala, например,
trait ToIntFunction[T] { def apply(v: T): Int }
def foo(f: ToIntFunction[String]) = println("foo1")
def foo[T](f: String=>T) = println("foo2")
, так как я считаю, что это более общая проблема для методаперегрузки.