• 函数式接口@FunctionalInterface


     PIG: 函数式接口让你的代码更优雅和复用性更高

    1. package com.dj.springtest.service;
    2. import javax.servlet.http.HttpServletResponse;
    3. /**
    4. * User: ldj
    5. * Date: 2023/10/15
    6. * Time: 1:26
    7. * Description: 有且只有一个抽象方法,但可以定义多个 default 或 static 方法
    8. */
    9. @FunctionalInterface
    10. public interface ExceptionFunction {
    11. void throwException(Integer httpStatus, String errMessage, HttpServletResponse response);
    12. }

     异常信息枚举类

    1. package com.dj.springtest.constant;
    2. /**
    3. * User: ldj
    4. * Date: 2023/10/15
    5. * Time: 2:25
    6. * Description: No Description
    7. */
    8. public enum ApiErrorEnum {
    9. UNKNOWN_SYSTEM_EXCEPTION(10500,"系统发生未知异常!");
    10. private Integer code;
    11. private String message;
    12. ApiErrorEnum(Integer code, String message) {
    13. this.code = code;
    14. this.message = message;
    15. }
    16. public String getMessage() {
    17. return message;
    18. }
    19. public void setMessage(String message) {
    20. this.message = message;
    21. }
    22. public Integer getCode() {
    23. return code;
    24. }
    25. public void setCode(Integer code) {
    26. this.code = code;
    27. }
    28. }

     lamdba表达式实现函数式接口,达到封装一个异常处理的逻辑

    1. package com.dj.springtest.utils;
    2. import com.dj.springtest.service.ExceptionFunction;
    3. import java.nio.charset.StandardCharsets;
    4. /**
    5. * User: ldj
    6. * Date: 2023/10/15
    7. * Time: 1:45
    8. * Description: 如果为true,就抛异常,否则不处理
    9. */
    10. public class ExceptionUtil {
    11. //返回接口ExceptionFunction的匿名内部类,只使用一次哦!
    12. public static ExceptionFunction isTrue(Boolean flag) {
    13. //lambda表达式
    14. return (status, errMessage, response) -> {
    15. if (flag) {
    16. if (null != response) {
    17. response.setStatus(status);
    18. response.setCharacterEncoding(String.valueOf(StandardCharsets.UTF_8));
    19. }
    20. throw new RuntimeException(errMessage);
    21. }
    22. };
    23. }
    24. //确定要抛异常
    25. public static void doThrow(String errorMsg){
    26. ExceptionUtil.isTrue(true).throwException(null, errorMsg, null);
    27. }
    28. }

    测试使用案例 

    1. package com.dj.springtest.demo;
    2. import com.dj.springtest.constant.ApiErrorEnum;
    3. import com.dj.springtest.utils.ExceptionUtil;
    4. import org.junit.Test;
    5. import org.junit.runner.RunWith;
    6. import org.springframework.beans.factory.annotation.Autowired;
    7. import org.springframework.boot.test.context.SpringBootTest;
    8. import org.springframework.http.HttpStatus;
    9. import org.springframework.test.context.junit4.SpringRunner;
    10. import javax.servlet.http.HttpServletResponse;
    11. /**
    12. * User: ldj
    13. * Date: 2023/10/15
    14. * Time: 2:15
    15. * Description:函数式接口让你的代码更优雅和复用性更高
    16. */
    17. @RunWith(SpringRunner.class)
    18. @SpringBootTest
    19. public class ExceptionUtilTest {
    20. @Autowired
    21. private HttpServletResponse response;
    22. @Test
    23. public void testExceptionFunction() {
    24. //模拟入参
    25. boolean flag1 = false;
    26. boolean flag2 = true;
    27. //1.先看常规写法
    28. if (flag1) {
    29. throw new RuntimeException("获取用户信息出错!");
    30. } else {
    31. System.out.println("继续执行业务代码...");
    32. }
    33. //2.函数式写法
    34. ExceptionUtil.isTrue(flag2).throwException(HttpStatus.INTERNAL_SERVER_ERROR.value(), ApiErrorEnum.UNKNOWN_SYSTEM_EXCEPTION.getMessage(), response);
    35. }
    36. }

  • 相关阅读:
    zigbee笔记:七、zigbee系统电源管理与睡眠唤醒
    如何快速开发一个简单实用的MES系统?
    Spring5应用之AOP概念详解
    记录开发过程中遇到的oracle 分页问题
    clickhouse技术总结待续
    运行谷歌开源BERT程序时遇到的bug修改记录
    DataGridView 控件分页
    文件包含入门到入yu
    第8章输入输出系统
    层叠、继承与盒模型
  • 原文地址:https://blog.csdn.net/dj1955/article/details/133834923