我有这样一种方法:
AuthResponse ar = HomerClient.postRequest(url + "/api/v1/session", auth);
一切正常,但我无法弄清楚如何称呼它...... 我试过了:
function loadAllPost() {
var divs = $("#posts");
$.get("twitor.php?action=last", function() {
var posts = [];
for(var i = 0; i < posts.length; i++) {
var newPost = addNewPost(posts[i].name, posts[i].text, posts[i].date);
posts.push(newPost);
}
divs.children().remove();
divs.append(posts);
});
}
$(function() {
loadAllPost();
setInterval(loadAllPost, 5000);
$("#submit").click(function() {
var newPostName = $("#name").val();
var newPostText = $("#text").val();
var newPostDate = (new Date()).toLocaleString();
var newPost = addNewPost(newPostName, newPostText, newPostDate);
newPost.hide();
$("#posts").append(newPost);
newPost.slideToggle();
$("name").val("");
$("text").val("");
$.post("twitor.php?action=new", {
text: newPostText,
name: newPostName
});
});
});
最后一个表达式无法编译。
如何在Java中调用参数化方法?
AuthResponse扩展了HomerMessage
答案 0 :(得分:2)
您需要提供类的名称,其中定义了static
方法:
Exception ar = SomeClass.<Exception>getException();
答案 1 :(得分:2)
您的代码无法编译,因为它没有返回AuthResponse
:它返回HomerMessage
。
如果将方法的返回类型更改为:
,则可以返回类型AuthResponse
private static <T extends HomerMessage> T postRequest(
String path, HomerMessage json, TypeReference<T> typeRef)
throws IOException, HomerDoh
这是您唯一正常完成的代码路径的返回类型。
如@SLaks所述,您不能将TypeReference
与泛型一起使用:
new TypeReference<T>() {}
由于擦除,这在运行时将等同于:
new TypeReference<Object>() {}
这几乎肯定不是你想要的 - 否则你可能只是使用了它,而不是首先调用泛型方法的问题。
您需要实际传递具体的TypeReference
作为参数:
private static <T extends HomerMessage> T postRequest(
String path, HomerMessage json, TypeReference<T> typeRef)
throws IOException, HomerDoh
然后你可以简单地称之为:
AuthResponse response = postRequest(
url + "/api/v1/session", auth,
new TypeReference<AuthResponse>() {});
,类型T
是从第三个参数推断出来的。
答案 2 :(得分:1)
表达式Exception ar = <Exception>getException();
无法编译,因为在参数化之前,泛型方法参数化习惯用法需要类名(如果方法不是静态的,则需要变量名)。
例如:
Exception ar = MyClass.<Exception>getException();
例如方法:
Exception ar = theObject.<Exception>getException();
Exception ar = this.<Exception>getException();