SSlogis
在Scala中实现特征时是否可以限制方法中的类型参数? (已编辑)
我不想通过特征参数化
例如
trait A{
def a[K]: Int
}
new A{
def a[K:SomeTypeClass] = ???
}
答案 0 :(得分:0)
Liskov substitution principle要求抽象函数的实现必须接受该抽象函数接受的所有类型。
要避免这种情况,您必须在trait上具有类型参数,以便不同的实现具有不同的接口,因此不必遵循Liskov。
trait A[TypeClass[_]] {
def a[K: TypeClass]: Int
}
new A[SomeTypeClass] {
def a[K: SomeTypeClass]: Int = ???
}
或
trait A {
type TypeClass[_]
def a[K: TypeClass]: Int
}
new A {
type TypeClass[T] = SomeTypeClass[T]
def a[K: SomeTypeClass]: Int = ???
}