Мне не очень ясно, как добавление параметра Type к объекту generi c может повлиять на вызов его метода apply. Если это не имело особого смысла, я попытался сформулировать простой пример express моей банальной путаницы.
scala> object Foo {def apply[T] = "Hello from foo"}
object Foo
scala> Foo
val res0: Foo.type = Foo$@709d6de5
scala> Foo[Int]
val res1: String = Hello from foo
Почему только когда я указываю [Int]
, метод apply вызывается и возвращает «Hello from foo»
С другой стороны, когда я использую метод apply, который принимает параметр, мне больше не нужно указывать тип.
scala> object Bar {def apply[T](useless: T) = "Hello from bar"}
object Bar
scala> Bar
val res2: Bar.type = Bar$@33089426
scala> Bar("Something useless")
val res3: String = Hello from bar
Почему в первом случае (когда не было параметров) мне нужно было указать тип, а во втором случае (когда был один бесполезный параметр) мне не нужно было указывать тип, чтобы приложение было вызвано?