【发布时间】:2020-12-20 10:20:57
【问题描述】:
如何从父 mixin 类型继承泛型类型?例如,我有一个特征 Foo 和一个泛型类型 A:
trait Foo[A] {
def value: A
}
我有一个使用Foo[String] 的类User,例如:
class User extends Foo[String] {
override def value: String = ???
}
一切正常。现在,我想添加一个自我类型为Foo[A] 的特征Bar[A]。
trait Bar[A] { self: Foo[A] =>
def anotherValue: A
}
如果我想在User 中使用Bar,我需要这样做:
class User extends Foo[String] with Bar[String] {
override def value: String = ???
override def anotherValue: String = ???
}
无论如何我可以将User 简化为这个? (Bar 自动从对应的Foo 推断类型。)
class User extends Foo[String] with Bar
【问题讨论】:
-
为什么需要这个?
extends Foo[String] with Bar并不比extends Foo[String] with Bar[String]短多少。 -
如果不是
String会变得很长。另外我觉得Bar的类型A应该很明显,编译器应该可以推断出来。 -
为什么不定义更短的类型别名?
type A = SomethingLongerThanString. -
应该很明显,编译器应该能够推断它 这不是推断,而是语法。如果你有
Bar[A],那么extends Bar是非法的。 -
是的,这就是为什么我在想是否有办法使用其他东西,例如证据。
标签: scala generics inheritance self-type