gpt4 book ai didi

Java - 无法将 lambda 用于自制接口(interface) - lambda 转换的目标类型必须是接口(interface)

转载 作者:行者123 更新时间:2023-11-30 02:17:03 27 4
gpt4 key购买 nike

我有以下代码:

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 转换的目标类型必须是接口(interface)”

是的,我尝试过使用:

l.setLocationLogic((LocationLogic) () -> {return false;});

最佳答案

您收到此错误是因为您只能创建 lambdas来自函数式接口(interface),这仅仅意味着一个接口(interface)恰好有一个 abstract方法。

现在你的setLocationLogic预计 LocationLogic (类)并且 java 禁止从类创建 lambda。这就是为什么你的第一个片段有效,但第二个片段无效。

更改 setLocationLogic 的签名至setLocationLogic(Logic logic) .

或者也许在 LocationLogic 中创建一个接受 boolean 值的构造函数,然后在实现的函数中返回该 boolean 值:

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));

关于Java - 无法将 lambda 用于自制接口(interface) - lambda 转换的目标类型必须是接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48019719/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com