Java-Can';t将lambda用于自制接口-lambda转换的目标类型必须是接口
我有以下代码:Java-Can';t将lambda用于自制接口-lambda转换的目标类型必须是接口,java,intellij-idea,lambda,Java,Intellij Idea,Lambda,我有以下代码: public interface Logic { boolean logicAccesscible(); } public class LocationLogic implements Logic { @Override public boolean logicAccesscible() { return true; } } 但当我尝试使用lambda创建LocationLogic对象时,它根本不起作用 l.
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;});
之所以会出现此错误,是因为您只能从函数接口创建
lambda
,这意味着只有一个abstract
方法的接口
现在,您的setLocationLogic
需要一个LocationLogic
(类),java禁止从类创建lambda。这就是为什么您的第一个代码片段有效,而您的第二个代码片段无效
将setLocationLogic
的签名更改为setLocationLogic(逻辑)
或者在LocationLogic中创建一个接受布尔值的构造函数,然后在实现的函数中返回:
public class LocationLogic implements Logic{
private final boolean accessible;
public LocationLogic(boolean accessible){
this.accessible = accessible;
}
public boolean logicAccessible(){
return accessible;
}
}
这样你就可以像这样使用它:
l.setLocationLogic(new LocationLogic(false));
这只是一个简单的二传。public void setLocationLogic(LocationLogic LocationLogic){this.LocationLogic=LocationLogic;}消息非常清楚。lambda是功能接口的实例。LocationLogic是一个类。让你的设定者以逻辑作为论据,而不是位置逻辑。所以我要改变的是?让你的设定者以逻辑作为论据,而不是位置逻辑。谢谢你的工作!