在使用maven进行war编译期间,此警告的含义是什么?

时间:2015-03-26 15:59:50

标签: java maven jetty cometd maven-war-plugin

我正在覆盖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。任何人都知道这里发生了什么?

1 个答案:

答案 0 :(得分:0)

public Object fromJSON(Map object) {

此处,泛型不用于定义Map可包含的对象类型。例如,如果将object定义为Map<String, Integer>,则只允许将具有这些类型参数的映射传递给该方法。

可以将任何地图传递给您的方法,Map<String, Integer>Map<String, Long>等。

我怀疑您正在实施this界面。由于该接口没有这种通用功能,我想除了将警告隔离到代码中的单个位置之外,没有太多可以去除警告。

正如您所说,它不会影响代码的功能。只要您投射到String并解析为Long / Integer就可以了。这就是泛型的含义,让你知道集合中存在什么类型的对象,这反过来又可以让你避免难看的铸造。