首页 > 解决方案 > 为什么不能在类外使用 lambda 表达式来实现函数式接口?

问题描述

可以通过这种方式实现功能接口:

abstract class predicate implements Predicate<Integer> {

    public static boolean test(int e) {
        return true;
    }
}

或者这样:

Predicate<Integer> predicate = e -> true;

以下代码编译:

import java.util.function.*;


abstract class predicate implements Predicate<Integer> {

    public static boolean test(int e) {
        return true;
    }
}

public class Main
{
    public static void main(String[] args) {
        System.out.println(predicate.test(2));
    }
}

但是这段代码并没有给出“预期的类、接口或枚举”错误:

import java.util.function.*;

Predicate<Integer> predicate = e -> true;

public class Main
{
    public static void main(String[] args) {
        System.out.println(predicate.test(2));
    }
}

为了使上面的代码工作,我必须在主类中实现接口。为什么?

标签: javalambda

解决方案


字段(甚至是常量字段)必须在类中定义,在这里您使用它就像您期望它是一个静态常量一样。喜欢,

public class Main {
    private static final Predicate<Integer> predicate = e -> true; // PREDICATE by convention

    public static void main(String[] args) {
        System.out.println(predicate.test(2));
    }
}

推荐阅读