使用Java Generics时Maven编译错误

时间:2015-08-06 16:11:15

标签: java maven generics

我正在使用Java 8并拥有以下代码:

public WeatherDTO(Map<?,?> mappedJsonData) {
    if (mappedJsonData == null || mappedJsonData.isEmpty()) {
        return;
    }

    List<?> weather = (List<?>)mappedJsonData.get("weather");
    if (weather != null && !weather.isEmpty()) {
        this.weather = (String) ((Map<?,?>)weather.get(0)).get("description");
    }

    Map<?,?> jsonMain = (Map<?,?>)mappedJsonData.get("main");
    if (jsonMain != null && !jsonMain.isEmpty()) {
        this.temperature = (double)jsonMain.get("temp") - 273.0;
        this.humidity = (int)jsonMain.get("humidity");
    }
}

当我在Eclipse和嵌入式Tomcat中运行Web应用程序时,此代码可以正常工作。 Eclipse Problems视图中也没有显示问题。

但是当我从我的shell / bash中启动maven编译时出现以下错误:

[错误]编译错误: [INFO] ----------------------------------------------- --------------

[ERROR] /home/xxx/xxx/xxx/src/main/java/xxx/xxx/xxx/weather/WeatherDTO.java:[52,64]不兼容的类型:捕获#1?无法转换为双重

[ERROR] /home/xxx/xxx/xxx/src/main/java/xxx/xxx/xxx/weather/WeatherDTO.java:[53,58]不兼容的类型:捕获#2?无法转换为int

有人知道我做错了什么吗? maven编译器插件似乎是最新的,我的JAVA_HOME指向Java 8版本。

pom.xml中的代码段

        <plugin>
            <inherited>true</inherited>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.3</version>
            <configuration>
                <source>${java.version}</source>
                <target>${java.version}</target>
                <encoding>${project.build.sourceEncoding}</encoding>
                <showWarnings>false</showWarnings>
                <showDeprecation>false</showDeprecation>
            </configuration>
        </plugin>

java.version的配置是1.8; Maven是3.0.4。

2 个答案:

答案 0 :(得分:4)

我得到了和你一样的错误。但是以下代码修复了它。我已经将代码设置为方法而不是构造函数,但我认为你可以忽略它,是吗?

private String weather;
private double temperature;
private int humidity;
public void WeatherDTO(Map<?, ?> mappedJsonData) {
    if (mappedJsonData == null || mappedJsonData.isEmpty()) {
        return;
    }

    List<?> weather = (List<?>) mappedJsonData.get("weather");
    if (weather != null && !weather.isEmpty()) {
        this.weather = (String) ((Map<?, ?>) weather.get(0)).get("description");
    }

    Map<?, ?> jsonMain = (Map<?, ?>) mappedJsonData.get("main");
    if (jsonMain != null && !jsonMain.isEmpty()) {
        this.temperature = (Double) jsonMain.get("temp") - 273.0;
        this.humidity = (Integer) jsonMain.get("humidity");
    }
}

答案 1 :(得分:1)

它适用于对象而不是基本类型。