Java学习-Function接口
- 1 函数式接口简介和学习地址
- 2 两种常见的函数式接口
- 2.1 Runnable:执行接口,不接收参数,也无返回结果。
- 2.2 Consumer:作为消费接口,接收一个参数,无返回结果。
- 3 初识
- 3.1 定义Function接口
- 3.1.1 定义`ThrowExceptionClass`Function`接口`
- 3.1.2 定义`BranchHandleDemo`Function`接口`
- 3.1.3 定义`PrentOrElseDemo`Function`接口`
- 3.2 定义service类
- 3.2.1 isTrue方法
- 3.2.2 isTrueOrFalse方法
- 3.2.3 isPresent方法
- 3.3 定义control类
- 4 总结
1 函数式接口简介和学习地址
函数式接口可以被隐式转换为 lambda 表达式。
函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。
参考地址1:菜鸟教程
参考地址2:B站视频
2 两种常见的函数式接口
2.1 Runnable:执行接口,不接收参数,也无返回结果。
2.2 Consumer:作为消费接口,接收一个参数,无返回结果。
3 初识
3.1 定义Function接口
- 首先是接口Interface
- 其次接口上方写上注解
@FunctionalInterface
- 定义抽象方法[
函数式接口只能有且仅有一个方法
]
3.1.1 定义ThrowExceptionClass
Function接口
package functioninterfacedemo.util;
/**
* @author klxz
* @description ThrowExceptionClass
* @date 2024/4/7
*/
@FunctionalInterface
public interface ThrowExceptionClass {
/**
* throwMessage
*
* @param message message
*/
void throwMessage(String message);
}
3.1.2 定义BranchHandleDemo
Function接口
package functioninterfacedemo.util;
/**
* @author klxz
* @description BranchHandleDemo
* @date 2024/4/7
*/
@FunctionalInterface
public interface BranchHandleDemo {
/**
* trueOrFalseHandler
*
* @param trueHandler trueHandler
* @param falseHandler falseHandler
*/
void trueOrFalseHandler(Runnable trueHandler, Runnable falseHandler);
}
3.1.3 定义PrentOrElseDemo
Function接口
package functioninterfacedemo.util;
import java.util.function.Consumer;
/**
* @author klxz
* @description PrentOrElseDemo
* @date 2024/4/7
*/
@FunctionalInterface
public interface PrentOrElseDemo<T extends Object> {
/**
* presentOrElseHandler
*
* @param consumer consumer
* @param falseAction falseAction
*/
void presentOrElseHandler(Consumer<? super T> consumer, Runnable falseAction);
}
3.2 定义service类
- 命名为service目的是让大家明白这个是执行类
3.2.1 isTrue方法
- 调用isTrue方法
- 接收control传入的参数flag
- 如有异常则进行Function接口
ThrowExceptionClass
的处理
3.2.2 isTrueOrFalse方法
- 调用isTrueOrFalse方法
- 接收control传入的参数flag
- 如有异常则进行Function接口
BranchHandleDemo
的处理 - Runnable不需要接收参数,直接调用run()执行
- 如果flag为true,则进行
trueHandler.run()
处理 - 如果flag为false,则进行
falseHandler.run()
处理
3.2.3 isPresent方法
- 调用
isPresent()
方法 - 接收control传入的参数
obj
- 如有异常则进行Function接口
PrentOrElseDemo
的处理 - Consumer需要接收一个参数,但不返回结果
如果obj不为null
则进行action.accept(obj)
处理- Runnable不需要接收参数,直接调用run()执行
如果obj为null
则进行trueHandler.run()
处理
package functioninterfacedemo;
import functioninterfacedemo.util.BranchHandleDemo;
import functioninterfacedemo.util.PrentOrElseDemo;
import functioninterfacedemo.util.ThrowExceptionClass;
/**
* @author klxz
* @description 工具类
* @date 2024/4/7
*/
public class ServiceClass {
public static ThrowExceptionClass isTrue(boolean flag) {
return (message) -> {
if (!flag) {
System.out.println("current is " + message + "!");
}
};
}
public static BranchHandleDemo isTrueOrFalse(boolean flag) {
return ((trueHandler, falseHandler) -> {
if (flag) {
trueHandler.run();
} else {
falseHandler.run();
}
});
}
public static PrentOrElseDemo<?> isPresent(String obj) {
return (action, runnable) -> {
if (obj != null) {
action.accept(obj);
} else {
runnable.run();
}
};
}
}
3.3 定义control类
分别调用service中的三个方法查看运行结果
package functioninterfacedemo;
/**
* @author klxz
* @description 练习函数式接口的demo
* @date 2024/4/7
*/
public class ControlClass {
public static void main(String[] args) {
// 传参为true,调用throwMessage方法
ServiceClass.isTrue(true).throwMessage("current is false!");
// 传参为false,调用throwMessage方法
ServiceClass.isTrue(false).throwMessage("current is false!");
// 传参为true,调用trueOrFalseHandler方法
ServiceClass.isTrueOrFalse(true).trueOrFalseHandler(() -> {
System.out.println("this is true handler!");
}, () -> {
System.out.println("this is false handler!");
});
// 传参为false,调用trueOrFalseHandler方法
ServiceClass.isTrueOrFalse(false).trueOrFalseHandler(() -> {
System.out.println("this is true handler!");
}, () -> {
System.out.println("this is false handler!");
});
// 传参不为null,调用presentOrElseHandler方法
ServiceClass.isPresent("hello world!").presentOrElseHandler(System.out::println, () -> {
System.out.println("current object is null!");
});
// 传参为null,调用presentOrElseHandler方法
ServiceClass.isPresent(null).presentOrElseHandler(System.out::println, () -> {
System.out.println("current object is null!");
});
}
}
4 总结
通过Function可以很优雅的写出业务逻辑代码,让代码看起来清爽~
持续学习中,有问题可以在评论区留言交流。