Java中的返回类型 - long to int casting - IntelliJ抱怨?

Kor*_*gay 0 java casting intellij-idea return-value

所以我有这个方法:

在此输入图像描述

那么为什么IntelliJ警告我那里不允许返回x,但是上面还可以吗?类ProjectElement的id也是long类型.

如果没有实际阅读,请不要回答这个问题.:)

Jon*_*eet 7

我假设"你可以在上面",你所指的是:

return (p1.getId().compareTo(p2.getId());
Run Code Online (Sandbox Code Playgroud)

那不是返回ID(这是一个Long) - 它返回compareTo方法的结果,这是一个int.(参见Long.compareTo(Long)文档.)

有没有从隐式转换long到int,这就是为什么你的声明return x;是无效的.

这在我看来,所有你需要做的是改变的声明x是int不是long-你只能从结果填充它compareTo通话,毕竟:

// Removed extraneous brackets as well...
int x = p1.getCustomerUnit().getId().compareTo(p2.getCustomerUnit().getId());
if (x == 0) {
    return p1.getId().compareTo(p2.getId());
}
return x;
Run Code Online (Sandbox Code Playgroud)

区分ID的类型和ID之间比较的结果类型很重要.


Abi*_*san 5

错误是因为,compare()方法声明返回int,您正在返回long.

ProjectElement的标识是可变长的类型,和Long的compare()方法的返回int.

(p1.getId().compareTo(p2.getId())返回int,因为Id是type的类型Long,而Long的compare()方法返回int