gpt4 book ai didi

oop - 限制可能实现 Trait 的类型

转载 作者:行者123 更新时间:2023-12-04 14:11:51 24 4
gpt4 key购买 nike

是否可以限制可以实现特征的类型?说,例如我有一个类型

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 SomethingAbility {
void bar() {
println "bar"
}

abstract void foo()
}

这意味着该特征不能由一个类实现,除非该类还提供了 foo()方法,但这与类型为 Something 的类不同

最佳答案

我认为您正在寻找的是@Selftype,请参阅http://docs.groovy-lang.org/docs/latest/html/gapi/groovy/transform/SelfType.html
基本上,它说明了使用此 trait 的类必须实现什么。所以随着

@SelfType(Something)
trait SomethingAbility {
void bar() {
println "bar"
}
}

你声明,任何使用这个特性的类也必须实现接口(interface)Something。例如,这可以确保如果您静态编译特征并从接口(interface) Something 调用方法,则该编译不会失败。当然,对于标准 Groovy,这不是必需的,因为鸭子类型。

关于oop - 限制可能实现 Trait 的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29298060/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com