我有一个用于处理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);
}
}
答案 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){...}