Перегрузка метода на основе параметра типа - PullRequest
4 голосов
/ 14 октября 2011

Я хотел бы иметь метод, который можно вызывать с параметром типа или без него, и возвращать разные значения для каждого. Вот некоторый явно упрощенный код:

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]()). Есть ли способ сделать это, что не является неоднозначным для компилятора?

1 Ответ

2 голосов
/ 14 октября 2011

Вы фактически перегружены типом возврата.Хотя ни Scala, ни Java не позволяют вам обычно делать это в этом случае, это происходит.

Foo() : String будет работать в этом случае, но это остается сомнительным, хотя перегрузка возвращаемого типа желательна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...