【发布时间】:2014-09-24 12:48:32
【问题描述】:
我创建了一个具有以下签名和方法的特征(细节省略):
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]] does not conform with type Cachable[A <: java.io.serializable>
如果我理解正确,编译器表示Cachable[scala.Serializable] 不是Cachable[java.io.Serializable] 的子类型。
我想,<: 语句类似于 java 的 ? extends 语句,可以解决 Java 中的此类问题。
如何在 Scala 中修复它?
【问题讨论】:
-
这个特征不能(可靠地)是协变的,因为你既接受 A 又返回 A
标签: scala generics covariance