Я определил черту Super[A]
с одним абстрактным методом и несколькими конкретными методами, многие из которых просто создают экземпляр нового объекта с некоторыми изменениями. Это пример:Как продлить подпись типа Scala подклассам?
trait Super[A] { self =>
def abstractMethod: A
def map[B](f: A => B): Super[B] = new Super[B] {
def abstractMethod = f(self.get)
}
}
теперь я хотел бы построить несколько классов, которые наследуют Super[A]
без изменения типа возвращаемого каждого конкретного метода.
Какой самый идиоматический способ достичь такого результата?
Если вы хотите для конкретного типа 'A', тогда вы можете сделать' class Impl extends Super [String] ', если вы хотите, чтобы реализация для некоторого общего type 'A' - вы можете сделать' class Impl [A] extends String [A] '. Я не знаю всей задачи, над которой вы работаете, но в качестве альтернативы вы можете рассмотреть класс. –
Я смущен, почему вы хотите изменить типы возвращаемых данных. Не могли бы вы показать пример класса, который наследует от 'Super [A]', где вам (нужно) изменять тип возврата каждого конкретного метода? – TeWu
Мне нужен каждый конкретный метод, чтобы вернуть экземпляр конкретного класса, а не экземпляр Super –