我试图在Scala中编写实现Google API Java客户端界面的凭据存储库:
import com.google.api.client.auth.oauth2.StoredCredential
import com.google.api.client.util.store.DataStore
import com.google.api.client.util.store.DataStoreFactory
class CredentialRepository extends DataStore[StoredCredential] {
... // Implementation
}
class CredentialDataStoreFactory extends DataStoreFactory {
val store = new CredentialRepository
def getDataStore[V <: Serializable](id: String): DataStore[V] = store
}
我收到此错误消息:
type mismatch; found : CredentialRepository required: com.google.api.client.util.store.DataStore[V]
如何使getDataStore协变,以便返回CredentialRepository?
答案 0 :(得分:0)
为什么不:
def getDataStore(id: String): DataStore[StoredCredential] = store
这应该有用。
我觉得有一个通用的V
对我来说没有意义,因为返回的类型是定义的而不是通用的。
编辑:
如果java接口需要这样的类型参数,你可以约束它:
def getDataStore[V <: StoredCredential with Serializable](id: String): DataStore[V] = store
或者
def getDataStore[V <: StoredCredential with Serializable](id: String): DataStore[StoredCredential] = store