有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    出现此错误的原因是,只能从函数接口创建lambdas,这意味着一个接口正好有一个方法abstract

    现在,您的setLocationLogic需要一个LocationLogic(类),java禁止从类创建lambda。这就是为什么您的第一个代码片段有效,而您的第二个代码片段无效

    setLocationLogic的签名更改为setLocationLogic(Logic logic)

    或者在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));