当前位置: 首页 > 知识库问答 >
问题:

“带注释的”lambda表达式,而不是与单应用方法[重复]的接口

常茂
2023-03-14

而不是像这样使用匿名类

register(new EventListener() {
  @Override
  public void apply(Event e) {
    // do your work
  }
});

对于java 8,我可以使用lambda表达式:

register(e -> (// do your work));

但是如果我的接口中的方法被注释了呢?

interface EventListener {
  @Annotation
  void apply;
}

可以注释lambda表达式吗?(具体来说,我想对lambda表达式使用Guava的EventBus.register()方法)

共有1个答案

卢黎明
2023-03-14

请参见:

注释Lambda表达式的功能接口

基本上,您不能直接在lambda表达式中进行注释,但可以使用扩展接口或类,通过调用class#getAnnotatedInterfaces()来访问注释。我认为这应该回答你的问题。

希望这有帮助,

圣地亚哥

 类似资料:
  • 但是如果我的接口中的方法是注释的呢? 有可能注释lambda表达式吗?(具体地说,我想使用Guava的eventbus.register()方法和lambda表达式)

  • 问题内容: Java 8引入了Lambda表达式和类型注释。 使用类型注释,可以定义Java注释,如下所示: 然后可以在任何类型引用上使用此注释,例如: 这是一个完整的示例,使用此批注打印“ Hello World”: 输出将是: 在Java 8中,还可以用lambda表达式替换此示例中的匿名类: 但是由于编译器会推断lambda表达式的Consumer类型参数,因此不再能够注释创建的Consum

  • Java8同时引入了Lambda表达式和类型注释。 可以将lambda表达式强制转换为使用者,然后注释强制转换表达式的类型引用: 但这不会产生所需的结果,因为创建的使用者类不会用强制转换表达式的批注进行批注。产出: 两个问题: 但是注释参数对lambda表达式不起作用: 有趣的是,当使用lambda表达式时,也不可能接收参数的名称(当使用javac-parameter编译时)。不过,我不确定这种行

  • 用Java 8 lambdas到处乱搞。为什么当我向接口添加另一个方法时,这会给我一个错误: 不使用第二个方法也能正常工作:“public int getID(String name)

  • IntelliJ一直建议我用方法引用替换我的lambda表达式。 两者之间有什么客观差异吗?

  • 问题内容: 随处可见Java 8 lambda。当我向接口添加其他方法时,为什么这会给我一个错误: 在没有第二种方法的情况下可以正常工作:“ public int getID(String name) 问题答案: Java lambda和方法引用只能分配给 功能接口 。从Java SE 8 API中,软件包描述: 每个函数接口都有一个单一的抽象方法,称为该函数接口的函数方法,lambda表达式的参