有没有可能限制可以实现trait的类型?比如说,我有一个类型
interface Something {
void foo()
}
以及一个特征
trait SomethingAbility {
void bar() {
println "bar"
}
}
有没有办法只允许实现该特性的类是Something
类型的,例如:
// OK
class SomethingImpl implements Something, SomethingAbility {
void foo() {
println "foo"
}
}
// error: this class should not be allowed to implement the trait
// because it's not a Something
class NotSomething implements SomethingAbility {
void foo() {
println "foo"
}
}
一种选择是向trait添加一个抽象方法
trait SomethingAbility {
void bar() {
println "bar"
}
abstract void foo()
}
这意味着除非一个类提供了一个名为
foo()
的方法,否则这个特性将不能被该类实现。但是,这并不意味着该类属于Something
类型。
SomethingAbility
实现Something
接口? - cfrickSomethingAbility
调用Something
的方法,但SomethingAbility
本身不需要成为一个Something
。 - Dónalfoo
而不是bar
? - cfrickSomethingAbility 实现 Something
,因为需要成为Something
的不是SomethingAbility
,而是实现该特性的类。 - Dónal