Я застреваю с «простой» проблемой. Я работаю с метаданными файлов. Я хотел бы предоставить как просмотр только для чтения (trait ReadOnly
) с помощью только геттеров, так и представление чтения-записи (trait ReadWrite
) с геттерами и сеттерами. Каждое представление с чтением и записью должно распространяться на просмотр только для чтения.Расширение общего типа
trait ReadOnly
trait ReadWrite
trait BasicRO extends ReadOnly {
def foo: String
def bar: Int
}
class BasicRW extends ReadWrite with BasicRO {
def foo: String = ???
def foo_=(str: String): Unit = ???
def bar: Int = ???
def bar_=(i: Int): Unit = ???
}
Пока все хорошо. Но теперь я хотел бы добавить метод snapshot
к ReadWrite
, который вернет соответствующий вид ReadOnly
(тот же, что был расширен подклассом ReadWrite
). В псевдо- лестницу, я хотел бы определить это ограничение, как:
trait ReadWrite[T <: ReadOnly] extends T {
def snaphsot: T
}
Но это не компилируется, потому что class type required but T found
(сообщение компилятора). Есть ли способ выразить это ограничение в системе типов Scala?
Вы частично правы относительно моего ответа (который я сейчас удалил). Я проверил его в REPL, и, похоже, он работал нормально, но более обширная проверка показала, что я неправильно истолковал вывод. – Shadowlands
Хорошо, я удалю ссылку на удаленное решение – itsbruce
Спасибо. Добавляем к вашему решению ограничение 'trait ReadOnly [T <: ReadOnly [T]]', трюк, который я ищу. – paradigmatic