"对泛型类型JsonResponse的引用应该参数化"

时间:2014-04-16 07:38:29

标签: java generics servlets

我有一个用于处理Ajax请求的Servlet,它以JSON格式提供响应。

我在网上收到此警告,如下所示。类型安全:方法setResponseData(Object)属于原始类型JsonResponse。对泛型类型JsonResponse的引用应该参数化

我应该采用另一种方式,或者添加SuppressWarning注释是否安全

public class JsonResponse<T>
{
    private T responseData;
    private boolean success;
    private String errorMessage;
    // + Getters and Setters
}

public class AjaxJson extends HttpServlet
{
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    {
        String function = request.getParameter("func");
        if (function == null)
            function = "";

        JsonResponse<?> jsonResponse;

        if (function.equals("getUsers"))
            getUsers(jsonResponse);
    }

    private void getUsers(JsonResponse jsonResponse)
    {
        jsonResponse = new JsonResponse<List<User>>();

        // Lets say I have a class called User
        List<User> users = new ArrayList<Users>();
        // get users and add to list

        jsonResponse.setResponseData(users); // Warning on this line
        jsonResponse.setSuccess(true);
    }
}

2 个答案:

答案 0 :(得分:2)

您正在使用JsonResponse作为通用

private void getUsers(JsonResponse jsonResponse)

将其更改为

private void getUsers(JsonResponse<List<User>> jsonResponse)

Java总是警告使用泛型,有关更多信息,请查看有关SO的this问题。

答案 1 :(得分:1)

不要将Raw Type与参数化类型混合。根本不要使用Raw Type。

修改getUsers()方法,因为您总是创建一个新的JsonResponse,即您不需要传递任何对象。

private JsonResponse<List<User>> getUsers(){
    JsonResponse<List<User>> jsonResponse = new JsonResponse<List<User>>();

    // Lets say I have a class called User
    List<User> users = new ArrayList<Users>();
    // get users and add to list

    jsonResponse.setResponseData(users); // No warning on this line
    jsonResponse.setSuccess(true);
    return jsonResponse;
}

请确认。很可能你已将其定义为

public void setResponseData(Object value){...}

将其替换为下面的

public void setResponseData(T value){...}