所以我在特质实施中遇到一些非常简单的问题时遇到了一些麻烦,我希望有一些我想念的简单解决方案。我希望在一个trait上有一个方法,它接受一个参数(并且只返回一个值,它只是调用它的具体实现的类型。具体来说:
trait Foo {
type ConcreteFoo // what to put here?
def combine(that:ConcreteFoo):ConcreteFoo
}
class FooImpl1 extends Foo {
def combine(that:FooImpl1):FooImpl1 = {
// implementation
}
}
class FooImpl2 extends Foo {
def combine(that:FooImpl2):FooImpl2 = {
// implementation
}
}
现在我在实施课程上有一个type Self = FooImpl
,但是如果可能的话,我宁愿在这个特性上做些什么。
答案 0 :(得分:1)
trait Foo[T <: Foo[T]]
def combine(that: T): T
}
class FooImpl1 extends Foo[FooImpl1] {
def combine(that: FooImpl1): FooImpl1 = {
???
}
}
class FooImpl2 extends Foo[FooImpl2] {
def combine(that: FooImpl2): FooImpl2 = {
???
}
}
答案 1 :(得分:0)
您可以在特征中添加类型参数,如下所示:
try {
...
} catch(Exception e) {
throw new IllegalStateException(e);
}