Я хотел бы иметь метод, который можно вызывать с параметром типа или без него, и возвращать разные значения для каждого. Вот некоторый явно упрощенный код:
object Foo {
def apply() = "Hello"
def apply[T]() = 1
}
В порядке вызова с параметром типа это нормально:
scala> Foo[String]()
res1: Int = 1
Но вызов его без параметра типа не работает:
scala> Foo()
<console>:9: error: ambiguous reference to overloaded definition,
both method apply in object Foo of type [T]()Int
and method apply in object Foo of type ()java.lang.String
match argument types ()
Foo()
Это не проблема времени выполнения, поэтому добавление неявного фиктивного параметра не поможет. Также не имеет ограниченного параметра (Foo[Unit]()
). Есть ли способ сделать это, что не является неоднозначным для компилятора?