在试图解决问题时,我最终编写了一个类型参数的方法,该参数在参数和返回类型中均未提及,即<T> void authenticate(Credentials credentials)
方法。 T
的唯一依赖关系在方法体中(详细内容见前)。所以我的问题是:那个泛型类型怎么解决?我找不到任何其他具有这种泛型类型参数的示例代码。Java如何解析不在方法声明中的泛型类型参数?
所以该方法的身体是一样的东西
public <T extends AuthResponse> void authenticate(Credentials credentials) {
Call<T> call = getAuthCall(credentials);
Response<T> response = call.execute();
// doSomething is an AuthResponse method
response.body().doSomething();
}
它调用的方法只有一个通用的返回类型,它是这样的:
private Call<T extends AuthResponse> getAuthCall(Credentials credentials) {
if (credentials instanceof CredentialsA)
return (Call<T>) service.authenticate((CredentialsA) credentials);
else if (credentials instanceof CredentialsB)
return (Call<T>) service.authenticate((CredentialsB) credentials);
else
throw new IllegalArgumentException();
}
于是两人的类型参数方法似乎是相关的。但我不明白如何。另外,(Call<T>)
投似乎并不像一个很好的解决我的问题 - service
是这样的改造接口:
public interface AuthServiceInterface {
@POST("auth/a") Call<AuthResponseA> authenticate(CredentialsA credentials);
@POST("auth/b") Call<AuthResponseB> authenticate(CredentialsB credentials);
}
简单的答案 - Java不会resove它,如果你删除它,并用AuthResponse替换T - 什么都不会改变 –