我使用以下签名和方法创建了一个特征(详细信息省略):
trait Cachable[A <: java.io.Serializable] {
def push(key: String, value: A) = ???
def pull(key: String): A = ???
}
以下代码无法编译(Document
类实现java.io.Serializable
,而List实现scala.Serializable
扩展java.io.Serializable
):
class DocsService extends Cachable[List[Document]] {
...
}
错误消息表示如下:Cachable [List [Document]]不符合Cachable类型[A&lt;:java.io.Serializable]。
如果我理解正确,编译器意味着Cachable[scala.Serializable]
不是Cachable[java.io.Serializable]
的子类型。
我认为,<:
语句类似于java的? extends
语句,它可以解决Java中的这类问题。
如何在Scala中修复它?