2011-11-04 53 views

回答

5

你不能用這些參數。

Java的泛型使用了所謂的類型擦除 - 基本上所有那些T在運行時變成Object。所以如果你真的需要知道這個T是什麼類的話,你需要一個Class對象被傳入。這正是parseAs正在做的 - 調用parseAs<String>,你會叫parseAs(String.class)

然而,你execute沒有Class參數。因此,它不知道它被調用的專業化程度,因此不能將該數據傳遞給parseAs

的解決方案是已知的調用鏈,其中的具體類型是(希望)添加Class<T>參數和撐船到一個新的水平了:

public <T> execute(Class<T> klass, HttpRequest request) { 
    ... 
    request.execute().parseAs(klass); 
} 
+0

但要注意這僅適用於如果T是不是本身一個參數化類型。例如,它可以是整數,但不是列表。 (該代碼可以編譯就好了,但有沒有辦法讓一個Class類型<列表>的值,所以它不會是有用的。) – jacobm

+0

這個怎麼樣公共無效執行(HttpRequest的要求,AjaxListener 回調)仍不可能沒有額外的類變量? – skayred

+0

@skayred,不!該''消失在運行時,它變成'執行(HttpRequest的要求,AjaxListener回調)' – bdonlan