Groovy 关闭强制在某些情况下不起作用

Groovy 关闭强制在某些情况下不起作用,groovy,Groovy,我正在从Groovy调用一个Java方法,该方法需要一个SAM接口实例作为参数 通常,Groovy很乐意在这些情况下传递闭包,并将相应地强制它,但是在这种情况下,接口将扩展另一个闭包并重写单个方法 注意-它仍然只有一个方法,但已被重写 在本例中,Groovy不会自动强制闭包,我似乎能够调用闭包的唯一方法是使用“AS” 我正在发布一个API来帮助孩子们学习代码,我真的不希望他们不得不使用“AS”,因为这会使事情复杂化 下面是一些显示问题的代码 Java public interface BaseH

我正在从Groovy调用一个Java方法,该方法需要一个SAM接口实例作为参数

通常,Groovy很乐意在这些情况下传递闭包,并将相应地强制它,但是在这种情况下,接口将扩展另一个闭包并重写单个方法

注意-它仍然只有一个方法,但已被重写

在本例中,Groovy不会自动强制闭包,我似乎能够调用闭包的唯一方法是使用“AS”

我正在发布一个API来帮助孩子们学习代码,我真的不希望他们不得不使用“AS”,因为这会使事情复杂化

下面是一些显示问题的代码

Java

public interface BaseHandler<T> {
    public void handle(T test);
}

public interface Handler extends BaseHandler<String> {
    public void handle(String test);
}

public class LibraryClass {
    public void method(Handler handler) {
        handler.handle("WORLD!");
    }
}
错误

Caught: groovy.lang.MissingMethodException: No signature of method: Bar.doIt() is applicable for argument types: (testClosures$_run_closure1) values: [testClosures$_run_closure1@fe63b60]

任何关于如何避免使用“AS”的帮助都将不胜感激

Groovy希望通过强制实现接口,但不知道应该实现哪种接口方法。因为有两个: 句柄(字符串测试)和第二个句柄:句柄(字符串测试)(baseHandler的)

解决方案是从处理程序中删除句柄(字符串测试)(由于使用了泛型,BaseHandler已经定位了此方法,因此不会添加任何内容)

就像这样,它工作正常:

public interface BaseHandler<T> {
    public void handle(T test);
}

public interface Handler extends BaseHandler<String> {

}

public class LibraryClass {
    public void method(Handler handler) {
        handler.handle("WORLD!");
    }
}
公共接口BaseHandler{
公共空间处理(T检验);
}
公共接口处理程序扩展了BaseHandler{
}
公共课图书馆课{
公共void方法(处理程序){
handler.handle(“世界!”);
}
}
public interface BaseHandler<T> {
    public void handle(T test);
}

public interface Handler extends BaseHandler<String> {

}

public class LibraryClass {
    public void method(Handler handler) {
        handler.handle("WORLD!");
    }
}