如何在int + = double时配置Eclipse Java警告

时间:2019-01-15 17:07:35

标签: java eclipse

此Java代码段不会导致编译警告。如何配置Eclipse在这种情况下发出警告?如果有问题,我将使用1.8合规性级别进行编译。

var sourceLocations = [{
    lat: "52.7972",
    lng: "-3.1031",
    title: "Source_1",
    distance: 0
}, {
    lat: "52.5795",
    lng: "-3.8714",
    title: "Source_2",
    distance: 0
}, {
    lat: "52.5735",
    lng: "-3.1266",
    title: "Source_3",
    distance: 0
}, {
    lat: "51.9295",
    lng: "-2.8547",
    title: "Source_4",
    distance: 0
}, {
    lat: "51.9498",
    lng: "-3.5812",
    title: "Source_5",
    distance: 0
}];
var myData = "{\"app_code\":\"J_lS80f2OSqMMDWFy2ZOmA\",\"app_id\":\"J_lS80f2OSqMMDWFy2ZOmA\",";
myData = myData + "\"destination0\":\"52.5488,-3.4974\",";
myData = myData + "\"mode\":\"fastest;car\",";
// loop thru source locations
var i;
for (i = 0; i < sourceLocations.length; i++) {
    var ele = "\"start" + i + "\":";
    myData = myData + ele + "\"" + sourceLocations[i].lat + "," + sourceLocations[i].lng + "\",";
}
myData = myData + "\"summaryAttributes\":\"di,tt\"}";
$.ajax({
    url: "https://matrix.route.api.here.com/routing/7.2/calculatematrix.json",
    type: "GET",
    dataType: "jsonp",
    jsonp: "jsoncallback",
    data: myData,
    success: function(data, status) {
        console.debug(data);
        var i;
        for (i = 0; i < data.response.matrixEntry.length; i++) {
            alert("Start" + i + ": Distance: " + data.response.matrixEntry[i].summary.distance + " Time: " + data.response.matrixEntry[i].summary.travelTime);
        }
    },
    error: function(data) {
        alert("error encountered trying to get mileage");
    }
});

2 个答案:

答案 0 :(得分:1)

我相信对于这种类型的转换没有警告,因为它是“预期的”功能。

JLS 4.2.4. Floating-Point Operations 似乎涵盖了这个问题。

  

如果数字运算符的至少一个操作数为double类型,则使用64位浮点算术执行该运算,并且数字运算符的结果为double类型的值。如果另一个操作数不是双精度数,则首先将其扩展(第5.1.5节)以通过数字提升(第5.6节)键入double。

稍后在同一部分:

  

当将浮点值转换为整数(第5.1.3节)时,Java编程语言使用朝四舍五入的功能,在这种情况下,数字的作用就像被截断了一样,丢弃了尾数位。向零舍入会在其结果处选择格式值,该值最接近且幅度不大于无限精确的结果。

因此, 以下代码默默地生成Integer.MAX_VALUE:

int intValue = 2;
double doubleValue = 123456789123.7; // this is much larger than Integer.MAX_VALUE.

intValue += doubleValue;

答案 1 :(得分:1)

Eclipse当前不支持它。也有一个Open bug。

Bug 516084 - Need implicit narrowing of type warning on plus-equals and minus-equals

背景:根据Java Language Specification section 15.26.2,复合赋值语句中没有警告似乎是正确的行为。

  

15.26.2。复合分配运算符

     

形式为E1 op = E2的复合赋值表达式等于E1 =(T)(((E1)op   (E2)),其中T是E1的类型,但仅评估E1   一次。

     

例如,以下代码是正确的:

     

short x = 3; x + = 4.6;并导致x的值为7,因为它   等效于:

     

short x = 3; x =(short)(x + 4.6);