java - 在正文中忽略参数时编写 lambda 表达式

标签 java lambda java-8

如果 lambda 表达式不需要参数,因此名称过多,我该如何编写?

这种方式不编译:

setRowFactory(-> new TableRowCustom());

但是这个可以:

setRowFactory(__ -> new TableRowCustom());

有没有更好的办法?

最佳答案

既然你提到这行得通

setRowFactory(__ -> new TableRowCustom());

我假设预期的功能接口(interface)方法必须接受单个参数。 The identifier _ is a reserved keyword since Java 8.

我只会使用一次性的单个(有效标识符)字符。

setRowFactory(i -> new TableRowCustom());
setRowFactory($ -> new TableRowCustom()); 

虽然,您应该避免使用 $,Java 语言规范 states

The dollar sign should be used only in mechanically generated source code or, rarely, to access pre-existing names on legacy systems. The underscore may be used in identifiers formed of two or more characters, but it cannot be used as a one-character identifier due to being a keyword.

你也可以写出来

setRowFactory(ignored -> new TableRowCustom());

要明确。

Java Language Specification定义 lambda 表达式的语法

LambdaExpression:
  LambdaParameters -> LambdaBody 

LambdaParameters:
  Identifier
  ( [FormalParameterList] )
  ( InferredFormalParameterList )
InferredFormalParameterList:
  Identifier {, Identifier}

换句话说,您不能省略标识符。


作为 Holger建议,如果当他们决定使用 _ 作为未使用的参数名称时,很容易在源代码中从 __ 更改为 _代码。您现在可能只想坚持下去。

关于java - 在正文中忽略参数时编写 lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37597728/

相关文章:

c# - 与 lambda 相比,C# 7 本地函数有哪些优势?

java - 为 IntelliJ 项目设置 java SDK

java - 标准化 java 构造函数以供反射使用

java - 如何找到我的 Web 服务的 URL?

python - 在 Python 中使用 Lambda 过滤数据框

java - 带参数的可调用 lambda 表达式

用于 map 的 Java 8 流收集器,误导性分组错误

java - 流式传输到 LinkedHashSet

java - 通过字段 'employeeDao' 表示不满足的依赖关系;

java - Java中的FFMPEG(运行时错误)