而不是像这样使用匿名类
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()方法)
请参见:
注释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表达式的参