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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章