Общие параметры не переопределяют автоматически абстрактные типы, даже если они имеют одинаковые имена. Попробуйте переименовать общие параметры (чтобы избежать конфликтов имен), а затем объявить типы TKey
и TValue
в теле метода.
class ANode[A,B](
val akey : A,
val aval : B
) extends INode {
type TKey=A
type TValue=B
def get(key : TKey) : TValue = aval
def set(key : TKey, v : TValue) : INode = new ANode(key,v)
}
Полагаю, было бы неплохо, если бы компилятор выдавал ошибку в строке, где вы указали имена универсальных типов, вместо того, чтобы ждать, пока вы не начнете использовать эти типы.