自定义函数式接口需确保仅含一个抽象方法,可使用@FunctionalInterface注解;1. 定义如MyFunction包含apply方法;2. 可添加默认和静态方法,如MyPredicate的and和isNotEmpty;3. 通过Lambda实现,如converter和notEmpty;4. 注意单一抽象方法原则、注解使用、避免盲目继承及合理应用泛型。

在Java中,自定义函数式接口其实很简单。只要一个接口只包含一个抽象方法,它就是函数式接口。你可以使用 @FunctionalInterface 注解来显式声明,这样编译器会帮你检查是否符合函数式接口的规范。
创建一个只含有一个抽象方法的接口:
@FunctionalInterface
public interface MyFunction<T, R> {
R apply(T t);
}
这个接口类似于JDK自带的 java.util.function.Function,表示接收一个参数并返回结果的函数。
函数式接口可以有多个默认方法或静态方法,但只能有一个抽象方法:
立即学习“Java免费学习笔记(深入)”;
layer是一款口碑极佳的web弹层组件,layer兼容了包括IE6在内的所有主流浏览器。 她数量可观的接口,使得您可以自定义太多您需要的风格,每一种弹层模式各具特色。官网有详细的API
21
@FunctionalInterface
public interface MyPredicate<T> {
boolean test(T t);
default MyPredicate<T> and(MyPredicate<T> other) {
return x -> this.test(x) && other.test(x);
}
static MyPredicate<String> isNotEmpty() {
return s -> s != null && !s.isEmpty();
}
}
上面的例子中,test 是唯一的抽象方法,and 是默认方法,isNotEmpty 是静态方法,完全合法。
定义好之后,可以用Lambda表达式或方法引用去实现:
MyFunction<Integer, String> converter = num -> "Number: " + num;
System.out.println(converter.apply(5)); // 输出:Number: 5
MyPredicate<String> notEmpty = s -> s != null && !s.isEmpty();
System.out.println(notEmpty.test("hello")); // true
基本上就这些。自定义函数式接口的关键是“单一抽象方法”,配合Lambda使用非常方便。不复杂但容易忽略细节。
以上就是java如何自定义函数式接口的详细内容,更多请关注php中文网其它相关文章!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号