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({})

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值