在Groovy@CompileStatic注释上是否有任何方法可以重写匿名类中的方法

在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

在Groovy@CompileStatic注释上,有没有办法重写匿名类中的方法

groogy源

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