我不确定问题标题的措辞是否恰当,所以我会详细说明.
sealed trait RedisKey[A] {
type valueType = A
def name: String
}
case object FirstName extends RedisKey[String] { val name = "first_name" }
case object Age extends RedisKey[Int] { val name = "age" }
trait Redis {
def fetch(key: RedisKey)// : key.valueType
}
Run Code Online (Sandbox Code Playgroud)
我需要限制的返回类型fetch的RedisKey的依赖型 valueType(不知道这是正确的术语).但很明显,上面不会工作,因为我需要一个具体的实例,RedisKey然后才能访问它的依赖类型.
是否有可能以任何方式实现这一目标?
你也可以使用依赖类型:
sealed trait RedisKey {
type valueType
def name: String
}
case object FirstName extends RedisKey { type valueType = String; val name = "first_name" }
case object Age extends RedisKey { type valueType = Int; val name = "age" }
trait Redis {
def fetch(key: RedisKey): key.valueType
}
(null: Redis).fetch(Age): Int
(null: Redis).fetch(FirstName): String
Run Code Online (Sandbox Code Playgroud)
最后两行用于测试repl中方法的返回类型.