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

Groovy traits中的私有抽象声明给出了静态上下文错误,groovy,abstract,traits,access-modifiers,Groovy,Abstract,Traits,Access Modifiers,我无法理解由以下代码段生成的错误: import groovy.transform.CompileStatic @CompileStatic trait FooTrait { void foo() { bar() } private abstract void bar() // private access modifier causes error } 使用privateaccess修饰符时,会生成以下编译器错误: [Static type check

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

import groovy.transform.CompileStatic
@CompileStatic
trait FooTrait {
    void foo() {
        bar()
    }
    private abstract void bar() // private access modifier causes error
}
使用
private
access修饰符时,会生成以下编译器错误:

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

这是目前的限制

此问题特定于
@CompileStatic

让我解释一下

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

SomeClassImplementingTrait.someStaticMethod() // here, someStaticMethod is defined
如果不利用trait内部对“this”的任何方法调用的动态调用(不管是静态还是非静态),就没有简单的方法可以解决这个问题


类中没有静态方法,我们拥有的是一个私有的抽象方法。所以你指的是另一个问题,除非我遗漏了什么。