【发布时间】:2020-12-08 20:36:57
【问题描述】:
我正在使用 java 中的函数式接口,现在我正在尝试定义一个 longfunction 来做一些简单的事情,比如添加数字或其他什么。
但是,如果我尝试这样做,同时将 Integer 作为 longfunction 的类型,如下所示:
LongFunction<Integer> i = (l) -> l + l;
但是这不起作用,我的编译器抱怨说“lambda 表达式中的返回类型错误:long 无法转换为整数”。如果 long 通常无法转换为整数,这将是有意义的。
但我完全能够做到这一点:
int a = 1;
int b = 5;
long l = a +b;
这是为什么?为什么 java 完全能够将 long 转换为 int,反之亦然,但在 lambda 中却要严格得多?
【问题讨论】:
-
您可以自动将整数转换为长整数,但不能自动将长整数转换为整数,因为这会导致数据丢失。
-
当
a和b明确声明为int时,是什么让您认为Java 在第二个sn-p 中将长整数转换为整数?