Jas*_*Jas 5 generics scala structural-typing
我知道我可以定义鸭子打字generics如下
trait MyTrait[A <: {def someMethod(key: String): String}]
Run Code Online (Sandbox Code Playgroud)
但是我不想string在我的trait定义中指定那么大.
我怎么能把它分成两部分(我希望我能拥有):
type A = B <: {def someMethod(key: String): String}
trait MyTrait[A]
Run Code Online (Sandbox Code Playgroud)
你可以做:
type B = { def someMethod(key: String): String }
trait MyTrait[A <: B]
Run Code Online (Sandbox Code Playgroud)
事实上,当结构类型的字符数超过50个时,一些Scala样式指南会推荐这种细分. 这是Scala文档中的一个:
如果结构类型的长度小于50个字符,则应在单行上声明.否则,它们应该分成多行,并且(通常)分配给它们自己的类型别名
您不能将绑定A <: B自身的类型分配给类型别名,因为它不是类型,而是对泛型参数的约束MyTrait.您可以在此处阅读有关类型边界的更多信息.