Groovy编译静态泛型方法报错的解决办法

报错的代码如下:

/**
 * 和服务有关的工具方法
 */
@CompileStatic
class ServiceUtils {

    /**
     * 创建一个服务的便捷方法
     * @param closure 要执行的任务,返回 service 的结果
     * @return 服务对象
     */
    static <T> Service<T> createService(Closure<T> closure) {
        new Service<T>() {
            @Override
            protected Task<T> createTask() {
                return new Task<T>() {
                    @Override
                    protected T call() throws Exception {
                        closure()
                    }
                }
            }
        }
    }
}

用 groovy joint 编译模式编译时报告如下错误

ServiceUtils.groovy: 22: unable to resolve class T
 @ line 22, column 33.
                   return new Task<T>() {
                                   ^
ServiceUtils.groovy: 23: unable to resolve class T
 @ line 23, column 21.
                       @Override
                       ^
2 errors

尝试过不用静态函数,也会报告相同错误。

最后找到一个解决办法,给类添加上泛型即可正常编译,如下

@CompileStatic
class ServiceUtils <T> {

    /**
     * 创建一个服务的便捷方法
     * @param closure 要执行的任务,返回 service 的结果
     * @return 服务对象
     */
    static <T> Service<T> createService(Closure<T> closure) {
        new Service<T>() {
            @Override
            protected Task<T> createTask() {
                return new Task<T>() {
                    @Override
                    protected T call() throws Exception {
                        closure()
                    }
                }
            }
        }
    }
}

// 使用方法
ServiceUtils.createService({})

具体原因不明,有待研究。

发布了64 篇原创文章 · 获赞 26 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/yangbo_hr/article/details/105469576