报错的代码如下:
/**
* 和服务有关的工具方法
*/
@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({})
具体原因不明,有待研究。