Java 中的箭头运算符“->”有啥作用?
Posted
技术标签:
【中文标题】Java 中的箭头运算符“->”有啥作用?【英文标题】:What does the arrow operator, '->', do in Java?Java 中的箭头运算符“->”有什么作用? 【发布时间】:2013-02-15 06:21:13 【问题描述】:在浏览一些代码时,我遇到了箭头运算符,它到底是做什么的?我以为 Java 没有箭头运算符。
return (Collection<Car>) CollectionUtils.select(listOfCars, (arg0) ->
return Car.SEDAN == ((Car)arg0).getStyle();
);
详细信息:Java 6、Apache Commons Collection、IntelliJ 12
更新/回答:事实证明,IntelliJ 12 支持 Java 8,它支持 lambda,并且正在“折叠”谓词并将它们显示为 lambda。下面是“展开”的代码。
return (Collection<Car>) CollectionUtils.select(listOfCars, new Predicate()
public boolean evaluate(Object arg0)
return Car.SEDAN == ((Car)arg0).getStyle();
);
【问题讨论】:
请注意,确切的场景是 IntelliJ 将现有代码渲染为 lambda 表达式以使其更易于阅读。实际代码不是 lambda 表达式。 【参考方案1】:这是新 lambda 表达式语法的一部分,将在 Java 8 中引入。有几个在线教程可以掌握它,这里有一个 link 。基本上,->
将参数(左侧)与实现(右侧)分开。
使用 lambda 表达式的一般语法是
(Parameters) -> Body
->
分隔参数和 lambda 表达式主体。
参数用括号括起来,这与方法相同,lambda 表达式主体是用大括号括起来的代码块。
【讨论】:
使用 JDK 6 的 OP,所以这实际上只是 IntelliJ 折叠代码,根据下面的@antonm 回答 @SeanLandsman OP 可能正在使用 Java 6,但在问题中他说他在其他地方遇到了该代码。至于为什么 IntelliJ 不报告错误,这是一个谜(也许 is 在 OP 系统的某处安装了 Java 7 版本)。但这是 lambda 表达式在 Java 中的语法,这是毫无疑问的。 你知道这个token类型的名字吗?【参考方案2】:当你想实现一个功能接口时,这个也很有用
Runnable r = ()-> System.out.print("Run method");
等价于
Runnable r = new Runnable()
@Override
public void run()
System.out.print("Run method");
;
【讨论】:
为什么提供这个功能? @Akaisteph7 当您不想定义方法时,因为您发现只有一个调用者会调用该方法。在这些情况下,不要在单独的地方定义方法,而是在方法体中传递,阅读匿名方法后跟 lambda 是有意义的。 我怎样才能看到具体的 run() 方法被覆盖了? Runnable 包含其他覆盖方法。如何具体选择 run()? @Pirks - 只能在只有一种方法的接口上使用它,【参考方案3】:我相信,这个箭头的存在是因为你的 IDE。 IntelliJ IDEA 用一些代码来做这样的事情。这称为代码折叠。您可以单击箭头将其展开。
【讨论】:
@DavidConrad 不,没有错。 IntelliJ 确实将函数式接口的内联实现折叠成看起来像 lambdas。 看问题:"Details: Java 6, Apache Commons Collection, IntelliJ 12" Lambda in java 6 ???【参考方案4】:这是一个 lambda 表达式。
这意味着,在 listOfCars 中,arg0 是该列表的项目之一。 他将要使用该项目,因此 ->,括号内的任何内容。
在本例中,他将返回符合条件的汽车列表
Car.SEDAN == ((Car)arg0).getStyle();
【讨论】:
【参考方案5】:Java 8 中添加的新运算符用于 lambda 表达式
Lambda 表达式是编写方法的简短方式。 间接用于实现functional interface
主要语法:(参数)-> 语句;
您应该知道一些基本的rules for effective lambda expressions writting。
【讨论】:
以上是关于Java 中的箭头运算符“->”有啥作用?的主要内容,如果未能解决你的问题,请参考以下文章