У вас может быть универсальный метод, но реализация абстрактного универсального метода сама должна быть универсальной:
scala> trait T { def p[A,B]: Map[A,B] }
defined trait T
scala> new T { def p[S, T] = Map[S, T]() }
res13: java.lang.Object with T = $anon$1@1f74864
Помните, что параметры неограниченного типа универсально определены количественно.Вы говорите, что p определено для всех пар типов без исключения или ограничения.Многие привязки S и T несовместимы с Int, поэтому вы не можете просто вернуть карту [Int, Int], где требуется карта [S, T].
Обновление: Re: "Таким образом, у меня могут быть неуниверсальные реализации обобщенных абстрактных классов и признаков, но не универсальных методов? "
Вы можете иметь неуниверсальную реализацию обобщенных абстрактных классов в этом смысле:
abstract class C[A, B, C] { /* ... */ }
class D extends C[Int, String, Boolean] { /* ... */ }
Или вот так:
class E extends C { /* ... */ }
Хотя это то же самое, что и:
class E extends C[Nothing, Nothing, Nothing] { /* ... */ }
И Nothing
- необитаемый тип в Scala.
Но вы не можетереализовать абстрактный обобщенный метод с неуниверсальным методом