我正在学习Java中的Lambda并试图理解它。例如,我有以下代码:
@FunctionalInterface
interface Square
{
int calculate(int x);
}
class Test
{
public static void main(String args[])
{
int a = 5;
Square s = (int x) -> x*x;
int ans = s.calculate(a);
System.out.println(ans);
}
}
我不理解这个语句square s=(int x)->x*x;
我看到s
是square
类型的引用变量。但是我不明白这个(int x)->x*x
到底是什么。这是方法定义吗?这个方法的返回类型是什么?我认为应该是int
,因为calculat
方法的返回类型是int
。如有任何反馈将不胜感激。
您的lambda表达式可以替换为匿名类:
Square s = new Square() {
@Override
public int calculate(int x) {
return x * x;
}
};
因此(int x)->x*x
只是calculat
方法的实现,该方法接受int
参数并返回int
值。顺便说一下,没有必要指定参数类型。您可以像这样做:
Square s = x -> x*x;
现在您有了square
类型的对象,可以调用之前在lambda表达式中定义的calculat
方法:
int squared = s.calculate(5);
将异常获取为 :lambda表达式中的返回类型错误:
以下代码在IntelliJ和Eclipse中编译得很好,但JDK编译器1.8.0\u 25对此表示不满。首先,代码。 javac 1.8.0\u 25的输出为: 当我更换时?超级E只需使用E,JDK就能成功编译。 当我将替换为,JDK编译成功。 由于它适用于JDK 1.8.0_60,我怀疑它是编译器错误。 有没有详细说明是什么原因造成的以及何时修复的?
我有一个静态的通用FormBuilder超文本标记语言助手方法(HTMLHelper类上的扩展方法),它接受视图模型类型的通用参数,然后当从数据库传递一个或多个字符串属性名称时,生成一个超文本标记语言形式在ASP. NET MVC 5.1 with. NET 4.5中。 我有一个公共方法来生成表单,还有单独的私有方法来生成表单中的“模块”部分,然后渲染其中的每个字段。类型参数从上到下沿此链传递。
我正在编写一个lambda表达式来将给定的纬度和经度转换为地址。表达式应该以坐标为参数,并返回其相应的地址。但是,返回的值为null。以下是我的班级: 以下是logcat的输出: 以下是我的用法: 是类的对象,以下是相关接口: 当我尝试从相关适配器打印坐标时,它们会正确打印。因此,位置正在正确设置,但是当我试图从另一个类访问它时,它会显示字符串的空值。你能建议一个替代方法来从表达式中提取位置吗?
我已经为使用者接口尝试了类似这样的lambda表达式,它没有问题。其他一些lambda表达式不起作用,因为它们返回一些东西,如。 编译和执行没有问题。 所以我遇到的问题是,我认为像这样的lambda表达式总是等效于,所以我希望编译器会给我一个错误,因为您不能从使用者接口返回(或任何其他类型)。显然,编译器正在将lambda表达式转换为一个方法,如果没有return语句,并且调用方法而不实际返回值。
问题内容: 我试图弄清楚如何从lambda表达式返回方法值: 但是,似乎在lambda表达式中使用关键字将显式返回lambda函数本身。是否有某种方式可以中断或强制返回整个方法? 问题答案: 是否有某种方式可以中断或强制返回整个方法? 不会。至少,除非抛出异常,否则不会。 基本上,这不是什么意思。您可以编写一个方法,该方法接受一个函数,该函数将返回“继续执行” ,而返回非null则表示“停止,并将