相关疑难解决方法(0)

为什么类不能使用相同签名的方法扩展特征?

为什么下面的错误?如何解决它?

编辑:我假设因为A和B编译成(接口,类)对,所以在编译C时选择正确的静态方法调用是一个问题.我希望优先级按顺序排列.

scala> trait A { def hi = println("A") }
defined trait A

scala> trait B { def hi = println("B") }
defined trait B

scala> class C extends B with A
<console>:6: error: error overriding method hi in trait B of type => Unit;
 method hi in trait A of type => Unit needs `override' modifier
       class C extends B with A

scala> trait A { override def hi = println("A") }
<console>:4: error: method hi overrides nothing …
Run Code Online (Sandbox Code Playgroud)

overriding scala traits

27
推荐指数
2
解决办法
9016
查看次数

强制特质实现方法

我有一个特征I(中介),一个M混合特性的类(混合器)和一个特征S(特定).

class M extends Something with S {
    def baz() = foo()
}

trait I {
    def foo(): { ...; bar(); ... }
    def bar()
}

trait S extends I {
    def bar() = 42
}
Run Code Online (Sandbox Code Playgroud)

I作为M和之间的中间层S,提供共同的界面.

我有一个实现方法fooI调用的方法bar(在未实现I,但其中所述).我想要实现的是所有扩展的traits都I 必须实现bar,因此这会抛出编译时错误,因为bar没有实现:

trait Z extends I
Run Code Online (Sandbox Code Playgroud)

这可能在Scala中吗?

PS:我知道Force Scala特性实现某种方法的答案,但我不想要那种明确的耦合.

scala traits abstract concrete

5
推荐指数
1
解决办法
880
查看次数

标签 统计

scala ×2

traits ×2

abstract ×1

concrete ×1

overriding ×1