未检查的方法调用作为原始类型的成员

11

我的项目中出现了以下警告:

对于原始类型'IWeatherCallbackListener'的成员'getWeatherData(T,Boolean,String)'进行了未经检查的调用。

我创建了以下接口 -

public interface IWeatherCallbackListener<T> {
 void getWeatherData(T weatherModel, Boolean success, String errorMsg);
}

并按照以下方式进行调用:
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());
        }
    });
}

我已经在我的MainActivity中实现了这个接口,并调用了该方法 -

WeatherConditions.getOpenWeatherData(etCityName.getText().toString(), OPEN_WEATHER_APP_ID, MainActivity.this)

有人能帮忙并解释一下这个警告吗?

1个回答

10

看起来你需要声明你的 T 类型,对于你的情况,它必须是 response.body() 实例的类。

尝试替换以下代码:

public static void getOpenWeatherData(String city, String appId, IWeatherCallbackListener listener)

to

public static void getOpenWeatherData(String city, String appId, IWeatherCallbackListener<ResponseBody> listener)

那是因为当你声明你的接口时,
IWeatherCallbackListener<T>

你正在使用 T 和它的原始类型。当你创建实例时,必须指明你将要使用的确切类型或者你想要作为参数接收的确切类型。
例如,如果你手动创建监听器,它应该像这样:
IWeatherCallbackListener<ResponseBody> listener = new IWeatherCallbackListener<ResponseBody>() {
    //implementation of methods
}

对于函数参数而言,你需要显示出可以接受的T类型。


谢谢@DEADMC,你的解决方案完美地运行了,但是你能否解释一下,因为我不理解这个概念。这将是一个很大的帮助。 - Akash Bisariya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接