java - 为什么不能在类外使用 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));
}
}
为了使上面的代码工作,我必须在主类中实现接口。为什么?
解决方案
字段(甚至是常量字段)必须在类中定义,在这里您使用它就像您期望它是一个静态常量一样。喜欢,
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));
}
}
推荐阅读
- java - Maven 错误:找不到前缀“原型”的插件
- arrays - 仅保留数组 Bash 中的唯一元素
- javascript - javascript在while循环中使用setInterval不起作用
- html - Hover on input to sibling item does not work
- reactjs - React array update
- security - Is VSCode vulnerable to CVE-2020-15999?
- r - R: Long tick mark labels in ggplotly are not properly shown
- android - Blogger API 在 WebView 中检索特定的帖子问题加载内容
- java - How to process an array and store it in java?
- flutter - Dart 未来阻塞主线程