当前位置: 首页 > 面试题库 >

当体内的参数被忽略时编写一个lambda表达式

步致远
2023-03-14
问题内容

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

这种方式不能编译:

setRowFactory(-> new TableRowCustom());

但这确实做到了:

setRowFactory(__ -> new TableRowCustom());

有没有更好的办法?


问题答案:

既然您提到了这可行

setRowFactory(__ -> new TableRowCustom());

我假设预期的功能接口方法必须接受一个参数。自Java8以来,该标识符_是保留关键字。

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

setRowFactory(i -> new TableRowCustom());
setRowFactory($ -> new TableRowCustom()); // allowed, but avoid this

甚至

setRowFactory(ignored -> new TableRowCustom());

明确地说。

在Java语言规范定义了一个lambda表达式的句法

LambdaExpression:
  LambdaParameters -> LambdaBody

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

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

作为霍尔格)建议,如果当他们决定使用_作为一个未使用的参数名称,它会很容易从改变___你的源代码。您可能现在只想坚持下去。



 类似资料:
  • 问题内容: 我正在使用EclipseLink(2.5.1,也尝试过2.5.2-M1)构建一个Java SE 8(oracle 1.8.0-b129)应用程序,并且拥有一个Entity类,尽管已正确注释和删除,但EclipeLink只是忽略了它在persistence.xml文件中引用。日志中没有提及该类,没有为它生成任何模式,等等。使用该实体将给出“抽象模式类型未知”错误。 我想我终于找到了原因,

  • 问题内容: 我正在尝试获取python的subprocess.call方法以通过列表(由字符串序列组成)接受一些args命令,如python文档中所建议。为了在将此行为放到我的实际脚本中之前对其进行探索,我打开了IPython,运行了一些涉及shell设置和args命令不同组合的命令,并得到以下行为: 似乎无论何时shell = True,输出似乎都与以下内容相同: 我很困惑;当我设置shell

  • 根据cppreference,gcc和clang最近都完成了P1102R2(“make()more optional for lambda”)的实现,这意味着我们可以在C++23中更简洁地定义lambda表达式。 但我发现它们与某种形式不符: clang接受这种形式,而gcc拒绝它的语法。 我应该信任哪个编译器?这个lambda在C++23中是格式正确还是格式错误?

  • 我有以下示例文本 当我应用以下正则表达式时,当我打印第一个捕获组时,我期望以下输出 但是我最终得到的是 在我看来,由于某种原因,否定的先行部分被忽略了,因此正则表达式与整个字符串匹配。 真正让我困惑的是,积极的前瞻性正如我所期望的那样工作。例如,使用在打印第一个捕获组时返回以下内容 这是有道理的,所以我真的很困惑为什么消极的前瞻性没有正常运作。

  • 我正在尝试在Java中使用Lambda表达式来理解以下方法参考代码: 我的问题是,为什么函数sameTemp只有一个参数?接口声明它必须有2个参数,所以对我来说没有意义。也许hTemp实例变量对这两个都足够了?我从Java完整参考书中获得了这一点,作者在那里解释了这一点: 块引用 在程序中,请注意HighTemp有两个实例方法: