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本身上,没有定义staticsomeStaticMethod
。要使其工作,您必须知道将实现该特性的类,就像您对普通静态方法调用一样:
SomeClassImplementingTrait.someStaticMethod() // here, someStaticMethod is defined
如果不利用trait内部对“this”的任何方法调用的动态调用(不管是静态还是非静态),就没有简单的方法可以解决这个问题
类中没有静态方法,我们拥有的是一个私有的抽象方法。所以你指的是另一个问题,除非我遗漏了什么。