traits中的私有抽象声明给出了静态上下文错误

时间:2016-06-16 09:28:13

标签: groovy abstract traits access-modifiers

我无法理解以下代码段产生的错误:

import groovy.transform.CompileStatic
@CompileStatic
trait FooTrait {
    void foo() {
        bar()
    }
    private abstract void bar() // private access modifier causes error
}

使用private访问修饰符时会生成以下编译器错误:

[Static type checking] - Non static method FooTrait$Trait$Helper#bar 
    cannot be called from static context

1 个答案:

答案 0 :(得分:1)

这是当前限制as described here

  

此问题特定于@CompileStatic

     

让我解释一下。

     

在特征中定义静态方法时,静态方法不属于特征。相反,它将被复制到实现特征的类。所以在特征本身上,静态someStaticMethod没有定义。要使其工作,您必须知道将要实现特征的类,就像您对普通静态方法调用一样:

SomeClassImplementingTrait.someStaticMethod() // here, someStaticMethod is defined
     

没有简单的方法来解决这个问题,如果没有动态调用任何方法调用特征内的“this”,静态或不静态。