我正在覆盖JSON.Convertor的toJSON和fromJSON方法,以获取用于处理JSON到Java对象的Cometd / Jetty应用程序,反之亦然。我在编译期间收到此警告,但它似乎不会影响代码,因为它可以工作,但是想要深入了解它。这是我编译时的输出:
[INFO] --- maven-compiler-plugin:3.2:compile (default-compile) @ rt ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 15 source files to /opt/rt_deploy/jetty_test_8080/build/rt/target/classes
[WARNING] Models.java:[98,32] found raw type: java.util.Map missing type arguments for generic class java.util.Map<K,V>
该警告指向我正在扩展的JSON.Convertor类中的fromJSON方法:
public static class RtUserConvertor implements JSON.Convertor {
@Override
public void toJSON(Object obj, JSON.Output out) {
RtUser rtUser = (RtUser) obj;
out.addClass(RtUser.class);
out.add("duid", rtUser.getDuid());
out.add("username", rtUser.getUsername());
out.add("gender", rtUser.getGender());
out.add("age", rtUser.getAge());
out.add("location", rtUser.getLocation());
out.add("pic_url", rtUser.getPic_url());
}
@Override
public Object fromJSON(Map object) {
long duid = Long.valueOf(object.get("duid").toString());
String username = (String) object.get("username");
String gender = (String) object.get("gender");
int age = Integer.valueOf(object.get("age").toString());
String location = (String) object.get("location");
String pic_url = (String) object.get("pic_url");
return new RtUser(duid, username, gender, age, location, pic_url);
}
}
如果我使用&#34;对象&#34;以外的任何东西覆盖它,它似乎不喜欢它。 param作为普通Map。任何人都知道这里发生了什么?
答案 0 :(得分:0)
public Object fromJSON(Map object) {
此处,泛型不用于定义Map
可包含的对象类型。例如,如果将object
定义为Map<String, Integer>
,则只允许将具有这些类型参数的映射传递给该方法。
可以将任何地图传递给您的方法,Map<String, Integer>
,Map<String, Long>
等。
我怀疑您正在实施this界面。由于该接口没有这种通用功能,我想除了将警告隔离到代码中的单个位置之外,没有太多可以去除警告。
正如您所说,它不会影响代码的功能。只要您投射到String
并解析为Long
/ Integer
就可以了。这就是泛型的含义,让你知道集合中存在什么类型的对象,这反过来又可以让你避免难看的铸造。