返回顶部
首页 > 资讯 > 精选 >Java怎么简化条件表达式
  • 763
分享到

Java怎么简化条件表达式

2023-07-02 08:07:06 763人浏览 独家记忆
摘要

这篇文章主要介绍“Java怎么简化条件表达式”,在日常操作中,相信很多人在Java怎么简化条件表达式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java怎么简化条件表达式”的疑惑有所帮助!接下来,请跟着小编

这篇文章主要介绍“Java怎么简化条件表达式”,在日常操作中,相信很多人在Java怎么简化条件表达式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java怎么简化条件表达式”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

一个实际例子

@GetMapping("/exportOrderRecords")public void downloadFile(User user, httpservletResponse response) {    if (user != null) {        if (!StringUtils.isBlank(user.role) && authenticate(user.role)) {            String fileType = user.getFileType(); // 获得文件类型            if (!StringUtils.isBlank(fileType)) {                if (fileType.equalsIgnoreCase("csv")) {                    doDownloadCsv(); // 不同类型文件的下载策略                } else if (fileType.equalsIgnoreCase("excel")) {                    doDownloadExcel(); // 不同类型文件的下载策略                } else {                    doDownloadTxt(); // 不同类型文件的下载策略                }            } else {                doDownloadCsv();           }        }    }}    public class User {    private String username;    private String role;    private String fileType;}

上面的例子是一个文件下载功能。我们根据用户需要下载Excel、CSV或TXT文件。下载之前需要做一些合法性判断,比如验证用户权限,验证请求文件的格式。

使用断言

在上面的例子中,有四层嵌套。但是最外层的两层嵌套是为了验证参数的有效性。只有条件为真时,代码才能正常运行。可以使用断言Assert.isTrue()。如果断言不为真的时候抛出RuntimeException。(注意要注明会抛出异常,Kotlin中也一样)

@GetMapping("/exportOrderRecords")public void downloadFile(User user, HttpServletResponse response) throws Exception {    Assert.isTrue(user != null, "the request body is required!");    Assert.isTrue(StringUtils.isNotBlank(user.getRole()), "download file is for");    Assert.isTrue(authenticate(user.getRole()), "you do not have permission to download files");    String fileType = user.getFileType();    if (!StringUtils.isBlank(fileType)) {        if (fileType.equalsIgnoreCase("csv")) {            doDownloadCsv();        } else if (fileType.equalsIgnoreCase("excel")) {            doDownloadExcel();        } else {            doDownloadTxt();        }    } else {        doDownloadCsv();    }}

可以看出在使用断言之后,代码的可读性更高了。代码可以分成两部分,一部分是参数校验逻辑,另一部分是文件下载功能。

表驱动

断言可以优化一些条件表达式,但还不够好。我们仍然需要通过判断filetype属性来确定要下载的文件格式。假设现在需求有变化,需要支持Word格式文件的下载,那我们就需要直接改这块的代码,实际上违反了开闭原则。

表驱动可以解决这个问题。

private HashMap<String, Consumer> map = new HashMap<>();public Demo() {    map.put("csv", response -> doDownloadCsv());    map.put("excel", response -> doDownloadExcel());    map.put("txt", response -> doDownloadTxt());}@GetMapping("/exportOrderRecords")public void downloadFile(User user, HttpServletResponse response) {    Assert.isTrue(user != null, "the request body is required!");    Assert.isTrue(StringUtils.isNotBlank(user.getRole()), "download file is for");    Assert.isTrue(authenticate(user.getRole()), "you do not have permission to download files");    String fileType = user.getFileType();    Consumer consumer = map.get(fileType);    if (consumer != null) {        consumer.accept(response);    } else {        doDownloadCsv();    }}

可以看出在使用了表驱动之后,如果想要新增类型,只需要在map中新增一个key-value就可以了。

使用枚举

除了表驱动,我们还可以使用枚举来优化条件表达式,将各种逻辑封装在具体的枚举实例中。这同样可以提高代码的可扩展性。其实Enum本质上就是一种表驱动的实现。(kotlin中可以使用sealed class处理这个问题,只不过具实现方法不太一样)

public enum FileType {    EXCEL(".xlsx") {        @Override        public void download() {        }    },        CSV(".csv") {        @Override        public void download() {        }    },        TXT(".txt") {        @Override        public void download() {        }    };    private String suffix;    FileType(String suffix) {        this.suffix = suffix;    }    public String getSuffix() {        return suffix;    }    public abstract void download();}@GetMapping("/exportOrderRecords")public void downloadFile(User user, HttpServletResponse response) {    Assert.isTrue(user != null, "the request body is required!");    Assert.isTrue(StringUtils.isNotBlank(user.getRole()), "download file is for");    Assert.isTrue(authenticate(user.getRole()), "you do not have permission to download files");    String fileType = user.getFileType();    FileType type = FileType.valueOf(fileType);    if (type!=null) {        type.download();    } else {        FileType.CSV.download();    }}

策略模式

我们还可以使用策略模式来简化条件表达式,将不同文件格式的下载处理抽象成不同的策略类。

public interface FileDownload{    boolean support(String fileType);    void download(String fileType);}    public class CsvFileDownload implements FileDownload{    @Override    public boolean support(String fileType) {        return  "CSV".equalsIgnoreCase(fileType);    }    @Override    public void download(String fileType) {        if (!support(fileType)) return;        // do something    }}    public class ExcelFileDownload implements FileDownload {    @Override    public boolean support(String fileType) {        return  "EXCEL".equalsIgnoreCase(fileType);    }    @Override    public void download(String fileType) {        if (!support(fileType)) return;        //do something    }}@Autowiredprivate List<FileDownload> fileDownloads;@GetMapping("/exportOrderRecords")public void downloadFile(User user, HttpServletResponse response) {    Assert.isTrue(user != null, "the request body is required!");    Assert.isTrue(StringUtils.isNotBlank(user.getRole()), "download file is for");    Assert.isTrue(authenticate(user.getRole()), "you do not have permission to download files");    String fileType = user.getFileType();    for (FileDownload fileDownload : fileDownloads) {        fileDownload.download(fileType);    }}

到此,关于“Java怎么简化条件表达式”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: Java怎么简化条件表达式

本文链接: https://lsjlt.com/news/340598.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java怎么简化条件表达式
    这篇文章主要介绍“Java怎么简化条件表达式”,在日常操作中,相信很多人在Java怎么简化条件表达式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java怎么简化条件表达式”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-07-02
  • 详解Java如何简化条件表达式
    目录一个实际例子使用断言表驱动使用枚举策略模式在复杂的实际业务中,往往会出现各种嵌套的条件判断逻辑。我们需要考虑所有可能的情况。随着需求的增加,条件逻辑会变得越来越复杂,判断函数会变...
    99+
    2024-04-02
  • JavaScript如何简化条件表达式
    这篇文章将为大家详细讲解有关JavaScript如何简化条件表达式,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。简化条件表达式经常碰到这种情况,要判断某个变量是否为指定的某些值,用常规的逻辑表达式会很长。...
    99+
    2023-06-27
  • c++条件表达式怎么执行
    条件表达式以三元运算符的形式执行,用于根据条件值在两个表达式之间进行选择。其语法为:condition expr1 : expr2。计算条件值,若真则返回 expr1 的值,若假则返回...
    99+
    2024-04-22
    c++
  • c语言条件表达式怎么执行
    在C语言中,条件表达式是由一个逻辑表达式组成的,用来决定程序的执行路径。条件表达式的执行顺序如下:1. 首先,计算逻辑表达式的值。逻...
    99+
    2023-08-19
    c语言
  • PHP8中如何使用Match表达式简化复杂的条件判断?
    PHP8中引入了一个新的特性 - Match表达式,它能够简化复杂的条件判断。Match表达式可以通过一种更简洁明了的方式,实现对多个条件的判断和执行。在本文中,我们将介绍如何使用Match表达式来简化复杂的条件判断,并给出具体的代码示例。...
    99+
    2023-10-22
    PHP Match表达式 简化条件判断
  • Java中怎么利用正则表达式实现条件查询
    本篇文章给大家分享的是有关Java中怎么利用正则表达式实现条件查询,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java正则表达式实现条件查询实例://Java正则表达式实现条...
    99+
    2023-06-17
  • Java使用lambda表达式简化代码的示例详解
    目录目的推理一下实现接口,使用方法内部类实现接口,使用方法局部内部类实现接口,使用方法匿名内部类实现接口,使用方法使用lamda表达式的,实现方法可带参数只有一个参数有返回值只有一条...
    99+
    2022-11-13
    Java lambda表达式简化代码 Java lambda表达式 Java 简化代码
  • 怎么使用Lambda表达式简化Comparator的使用问题
    这篇“怎么使用Lambda表达式简化Comparator的使用问题”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用La...
    99+
    2023-07-05
  • 怎么在React条件渲染中使用三元表达式
    本篇内容介绍了“怎么在React条件渲染中使用三元表达式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!三元...
    99+
    2024-04-02
  • JavaScript中优化条件表达式相关的重构思路是怎样的
    JavaScript中优化条件表达式相关的重构思路是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。JavaScript 是一种易于学习的...
    99+
    2024-04-02
  • 如何在PHP8中使用Match表达式更简洁地判断条件?
    如何在PHP8中使用Match表达式更简洁地判断条件?在PHP8中,引入了一种新的条件判断语法 - Match表达式,它可以让我们以更简洁的方式判断多个条件并执行相应的代码块。Match表达式的作用类似于switch语句,但比switch更...
    99+
    2023-10-22
    PHP Match表达式 简洁判断条件
  • Java中Lambda表达式怎么用
    这篇文章主要介绍了Java中Lambda表达式怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、前言Lambda表达式是java 8中包含的重要功能之一。Lambda表...
    99+
    2023-06-15
  • java lambda表达式怎么使用
    Java lambda表达式是Java 8引入的一种新特性,它可以简化代码的编写,尤其是在处理函数式接口时非常方便。下面是使用lam...
    99+
    2023-09-23
    java
  • Java Lambda表达式怎么应用
    Java 中的 Lambda 表达式是 JDK 8 中引入的一种函数式编程的特性,它可以使代码更简洁、更易读、更易维护。Lambda...
    99+
    2023-10-10
    java
  • Java Lambda表达式怎么使用
    这篇文章主要介绍“Java Lambda表达式怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java Lambda表达式怎么使用”文章能帮助大家解决问题。一、背景Lamb...
    99+
    2023-06-29
  • 【表达式引擎】简单高效的轻量级Java表达式引擎:Aviator
    简单高效的轻量级表达式引擎:Aviator 前言 Aviator 是一个高性能、、轻量级的表达式引擎,支持表达式动态求值。其设计目标为轻量级和高性能,相比于 Groovy 和 JRuby 的笨重,...
    99+
    2023-09-09
    java 数据库 spring boot
  • 怎么使用Lambda表达式简化代码提高生产力
    这篇文章主要介绍“怎么使用Lambda表达式简化代码提高生产力”,在日常操作中,相信很多人在怎么使用Lambda表达式简化代码提高生产力问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Lambda表达式...
    99+
    2023-07-06
  • 什么是java表达式
    什么是java表达式在Java语言中,表达式是由变量或常量与符号的组合,例如:num1+num2;或age>18;等。表达式中常用的符号称为运算符,这些运算符作用的变量或常量称为操作数。例如:在表达式age>18中,age和18是操作数,符...
    99+
    2020-08-17
    java基础 java 表达式
  • PHP8中如何使用Match表达式进行更简洁的条件判断?
    PHP8中引入了一种新的条件判断语法——Match表达式(也称为模式匹配)。在之前的版本中,我们通常使用多个if-else语句来进行条件判断,而Match表达式的出现使得这一过程更加简洁和易读。本文将介绍PHP8中如何使用Match表达式,...
    99+
    2023-10-22
    PHP Match表达式 简洁的条件判断
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作