intellij idea Java不能将lambda用于自制接口lambda转换的目标类型必须是接口
我有以下代码:
public interface Logic
{
boolean logicAccesscible();
}
public class LocationLogic implements Logic
{
@Override
public boolean logicAccesscible()
{
return true;
}
}
但当我尝试使用lambda创建LocationLogic对象时,它根本不起作用
l.setLocationLogic(new LocationLogic()
{
@Override
public boolean logicAccesscible()
{
return false;
}
});
那只鹬很管用,但是
l.setLocationLogic(() ->
{
return false;
});
给出错误“lambda转换的目标类型必须是接口”
是的,我试着使用:
l.setLocationLogic((LocationLogic) () -> {return false;});
# 1 楼答案
出现此错误的原因是,只能从函数接口创建
lambdas
,这意味着一个接口正好有一个方法abstract
现在,您的
setLocationLogic
需要一个LocationLogic
(类),java禁止从类创建lambda。这就是为什么您的第一个代码片段有效,而您的第二个代码片段无效将
setLocationLogic
的签名更改为setLocationLogic(Logic logic)
或者在LocationLogic中创建一个接受布尔值的构造函数,然后在实现的函数中返回:
这样你就可以像这样使用它: