Я хотел бы написать перегруженные функции следующим образом:
case class A[T](t: T)
def f[T](t: T) = println("normal type")
def f[T](a: A[T]) = println("A type")
И результат будет таким, каким я ожидал:
f (5) = > нормальный тип
f (A (5)) = > Тип типа
Пока все хорошо. Но проблема в том, что одно не работает для массивов:
def f[T](t: T) = println("normal type")
def f[T](a: Array[T]) = println("Array type")
Теперь компилятор жалуется:
double definition: method f: [T] (t: Array [T]) Единица и метод f: [T] (t: T) Единица в строке 14 имеет один и тот же тип после стирания: (t: java.lang. Объект) Единица
Я думаю, что подпись второй функции после стирания типа должна быть (a: Array [Object]) Unit not (t: Object) Unit, поэтому они не должны сталкиваться друг с другом. Что мне здесь не хватает?
И если я делаю что-то не так, как было бы правильно писать f так, чтобы правый вызывался в соответствии с типом аргумента?