[英]Scala and typecheck for dependent types
给定java类“抽象凭证”并导出“EmailPassword”/“OAuth”类。
和接口CredentialsStorage,具有适当的实现EmailPasswordStorage和OAuthStorage
我需要创建一些带三元组的数组:存储,有效凭据,无效凭证)
所以我从这开始:
type T <: Credentials
type S <: CredentialsStorage[T]
private var testData: Array[(S, T, T)] = Array(
(emailStorage, validEmailPasswd, new EmailPasswordCredentials("1", "2")),
(oAuthStorage, validAuthToken, new OAuthCredentials("invalid auth token", OAuthService.FACEBOOK))
)
但这不编译
error: type mismatch;
found : storage.EmailPasswordStorage[credentials.EmailPassword]
required: CredentialsStorageTest.this.S
(emailStorage, validEmailPasswd, new EmailPasswordCredentials("1", "2")),
我如何解决这个问题,这里依赖/存在类型的正确定义是什么?
UPD我用元组类型本身的定义解决了这个问题:
type T[A] = (CredentialsStorage[A],A,A)
val testData : Array[T[_ <: Credentials]] = ...
type T <: Credentials
定义抽象类型。 您还没有定义此实例中的T
是什么。 尝试包括type T = credentials.EmailPassword
并type S = storage.EmailPasswordStorage[T]
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.