我正在用java处理一些函数接口,现在我正在尝试定义一个longfunction,它可以做一些简单的事情,比如添加数字或其他什么。
但是,如果我在将integer作为long函数的类型时尝试这样做,如下所示:
LongFunction<Integer> i = (l) -> l + l;
但是这不起作用,我的编译器抱怨说“lambda表达式中的返回类型不正确:long不能转换为整数”。如果long通常不能转换成整数,这就有意义了。
但我完全可以做到:
int a = 1;
int b = 5;
long l = a +b;
为什么会这样?为什么java完全能够将long转换成int,而通常情况下是相反的,但是在lambda中却更加严格?
2条答案
按热度按时间brvekthn1#
您的示例是将整数转换为long,这是一个加宽操作,不会导致信息丢失。所以没有问题。从long到int可能会导致信息丢失,因此需要强制转换。
尽管返回类型是long,但下面的代码对int和long都适用。
但这不会,因为这将是lambda内部的一个缩小操作,然后才转换为最终结果的long。
vshtjzan2#
为什么java完全能够将long转换成int,反之亦然。。。
不是的。它将转换
int
至long
,这是您的第二个代码段显示的内容。它不会做相反的事。这将生成编译器错误:
因为不是所有的
long
值可以存储在int
,不支持此方向的转换。