報錯的代碼如下:
/**
* 和服務有關的工具方法
*/
@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({})
具體原因不明,有待研究。