Aka*_*iya 8 java generics android interface generic-interface
以下警告显示在我的项目中 -
未选中调用'getWeatherData(T,Boolean,String)'作为原始类型'IWeatherCallbackListener'的成员.
我创建了以下界面 -
public interface IWeatherCallbackListener<T> {
void getWeatherData(T weatherModel, Boolean success, String errorMsg);
}
Run Code Online (Sandbox Code Playgroud)
并按以下方式调用它,
public class WeatherConditions {
private static IWeatherApi mWeatherApi;
/**
* @param city
* @param appId
* @param listener
*/
public static void getOpenWeatherData(String city, String appId, IWeatherCallbackListener listener) {
mWeatherApi = ApiService.getRetrofitInstance(BASE_URL_OPEN_WEATHER).create(IWeatherApi.class);
Call<OpenWeatherModel> resForgotPasswordCall = mWeatherApi.getOpenWeatherData(appId, city);
resForgotPasswordCall.enqueue(new Callback<OpenWeatherModel>() {
@Override
public void onResponse(Call<OpenWeatherModel> call, Response<OpenWeatherModel> response) {
if (response.body() != null) {
if (listener != null)
listener.getWeatherData(response.body(), true, "");
}
}
@Override
public void onFailure(Call<OpenWeatherModel> call, Throwable t) {
if (listener != null)
listener.getWeatherData(null, false, t.getMessage());
}
});
}
Run Code Online (Sandbox Code Playgroud)
我在我的MainActivity中实现了这个接口,并将该方法称为 -
WeatherConditions.getOpenWeatherData(etCityName.getText().toString(), OPEN_WEATHER_APP_ID, MainActivity.this)
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮助并解释这个警告.
看起来你也必须声明你的T类型,在你的情况下它必须是一类response.body()实例.
尝试更换线路
public static void getOpenWeatherData(String city, String appId, IWeatherCallbackListener listener)
Run Code Online (Sandbox Code Playgroud)
至
public static void getOpenWeatherData(String city, String appId, IWeatherCallbackListener<ResponseBody> listener)
Run Code Online (Sandbox Code Playgroud)
这是因为当你声明你的界面时
IWeatherCallbackListener<T>
Run Code Online (Sandbox Code Playgroud)
您使用T及其原始类型.当您创建实例,你必须表现出什么确切类型,你会使用或究竟键入您希望收到作为参数.
例如,如果您手动创建该侦听器,则必须如下所示
IWeatherCallbackListener<ResponseBody> listener = new IWeatherCallbackListener<ResponseBody>() {
//implementation of methods
}
Run Code Online (Sandbox Code Playgroud)
争论同样如此,你必须展示T你能得到的东西.
| 归档时间: |
|
| 查看次数: |
14834 次 |
| 最近记录: |