我被一个“简单”的问题困住了。我正在处理文件元数据。我想提供一个trait ReadOnly
只有 getter 的只读视图 ( ) 以及一个trait ReadWrite
带有 getter 和 setter 的读写视图 ( )。每个读写视图都必须扩展一个只读视图。
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
子类扩展的相同)。在pseudo-scala中,我想将此约束定义为:
trait ReadWrite[T <: ReadOnly] extends T {
def snaphsot: T
}
但它不能编译,因为class type required but T found
(编译器消息)。有没有办法在 Scala 类型系统中表达这个约束?