在Groovy@CompileStatic注释上是否有任何方法可以重写匿名类中的方法
在Groovy@CompileStatic注释上,有没有办法重写匿名类中的方法 groogy源在Groovy@CompileStatic注释上是否有任何方法可以重写匿名类中的方法,groovy,Groovy,在Groovy@CompileStatic注释上,有没有办法重写匿名类中的方法 groogy源 import groovy.transform.CompileStatic; interface HelloWorld { public void greet(); } class HelloWorldAnonymousClassesParents { public void hi() { println "hi" } } @CompileStatic pu
import groovy.transform.CompileStatic;
interface HelloWorld {
public void greet();
}
class HelloWorldAnonymousClassesParents {
public void hi() {
println "hi"
}
}
@CompileStatic
public class HelloWorldAnonymousClasses extends HelloWorldAnonymousClassesParents {
public void hi() {
System.out.println("hihi ");
}
public void sayHello() {
HelloWorld spanishGreeting = new HelloWorld() {
public void greet() {
hi() //<- here [Static type checking] - Reference to method is ambiguous error
System.out.println("spanishGreeting");
}
};
spanishGreeting.greet();
hi()
}
}
def myApp = new HelloWorldAnonymousClasses();
myApp.sayHello();
如何使用@CompileStatic注释避免该错误?您可以将其作为闭包编写。这意味着一个as HelloWorld,并且由于接口只有一个groovy可以推断的方法
HelloWorld spanishGreeting = {
hi()
System.out.println("spanishGreeting");
}
上面的代码是Groovy2.3;对于早期的groovy 2版本,它需要像
def spanishGreeting = {/*...*/} as HelloWorld
这是一只虫子。我已经为它制作了一张罚单:谢谢你报道groovy jiraThank谢谢你的回答。但西班牙式的问候变成了结束。因此发生了GroovyCastException。是否需要添加任何代码来避免GroovyCastException?上面的代码是groovy 2.3;在groovy 2.2中,它可能与def spanishGreeting={/*…*/}等显式强制转换一起工作,就像HelloWorlddef spanishGreeting={/*…*/}一样,因为HelloWorld代码在groovy 2.1中工作。谢谢你的帮助。
def spanishGreeting = {/*...*/} as HelloWorld