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

Java中的返回类型-从long到int casting-IntelliJ抱怨?,java,casting,intellij-idea,return-value,Java,Casting,Intellij Idea,Return Value,所以我有这个方法: 那么,为什么IntelliJ警告我这里不允许返回x,但上面的返回是可以的呢?ProjectElement类的id也是long类型 请在未实际阅读之前不要回答问题。:)错误是因为,compare()方法声明返回int,您返回的是long ProjectElement的Id变量是Long类型,而Long的方法返回int (p1.getId().compareTo(p2.getId())返回int,因为Id是Long的类型,而Long的方法返回int抱怨的原因是为int返回Lon

所以我有这个方法:

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


请在未实际阅读之前不要回答问题。:)

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

ProjectElement
的Id变量是Long类型,而
Long
的方法返回
int


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

抱怨的原因是为
int
返回
Long
会导致截断,你浪费了一半位

如果您真的必须这样做,请将其转换为:
return(int)x;
,并为后果做好准备:-)

干杯,

我认为您所指的“就在上面”是:

return (p1.getId().compareTo(p2.getId());
这不是返回ID(它是一个
Long
)-它是返回
compareTo
方法的结果,这是一个
int
。(见附件。)

没有从
long
int
的隐式转换,这就是为什么
语句返回x无效

在我看来,您所需要做的就是将
x
的声明更改为
int
,而不是
long
——毕竟,您只是从
比较调用的结果填充它:

// 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;

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

我的意思是IDEA不会对行:return(p1.getId()…)发出警告,但对下面的行发出警告。。但它们都返回长值?@KorayTugay:不,它们不是。请仔细阅读我的答案(特别是如果你抱怨有人没有仔细阅读你的问题)
compareTo
方法的返回类型是
int
,而不是
long
。以后请以文本形式而不是(或可能同时)图像形式提供代码。我们必须手动输入您的代码才能在答案中引用它,这一事实很烦人。@JonSkeet抱歉,我的目标是显示IntelliJ警告我某个特定的返回语句,而不是另一个返回语句,即使它们都是“long”类型。当然(尽管它们不是)-但是你没有理由不描述它,而是将代码作为文本包含,或者在必要时将其作为文本和屏幕截图包含。@JonSkeet是的,你是对的,它们不是:)我的错。无论如何,谢谢你。我会注意的,并且总是包括文本。没问题,我的朋友。