首页 > 编程语言 >java业务逻辑判断

java业务逻辑判断

时间:2025-01-21 17:27:28浏览次数:3  
标签:Map 逻辑 判断 java return isEmpty obj null

      在平时的业务开发中,空指针出现的频率是比较高的bug,在出现空指针的时候,很多小伙伴都是习惯性地加!=null 的判断,这个bug就能解决。

当代码中频繁出现 !=null 的判断时,我们就会很头疼,能不能高效、优雅地做这个判断?

答案当然是可以的。

1. 在做!=null 的判断时,请停顿一下,看一下我们要做判断的这个数据是什么类型的?

平时开发数据类型无非就是String类型,Object 自定义对象  List集合,Array数组,Map集合类型。

2.需要思考这个数据类型对应的工具类有那些?

String类型,对应的工具类有StringUtils

Object对象,对应的工具类有ObjectUtils

Array数组,对应的工具类有Arrays

List集合,Map集合对应的工具类有Collections, CollectionUtils

这些工具类都是Java,Spring框架自带的工具类。

3.使用对应类型的工具类进行业务判断

  • 如果是String类型时,使用StringUtils工具类
String str = "";
StringUtils.isEmpty(str);  // true

StringUtils工具类比较有针对性,是针对String字符串的工具类

public static boolean isEmpty(@Nullable Object str) {
   return str == null || "".equals(str);
}

在isEmpty方法中,既有为null的判断,也有是否等于空字符串的判断。

  • 如果这个数据是Object类型,可以使用ObjectUtils工具类
Object obj = null;
ObjectUtils.isEmpty(obj); // true
  • 如果这个数据是Map类型,也可以使用ObjectUtils 工具类
Map<String,Object> map = Collections.emptyMap();
ObjectUtils.isEmpty(map);// true
  • 如果这个数据是List类型,还可以使用ObjectUtils工具类
List<Integer> list =Collections.EMPTY_LIST;
ObjectUtils.isEmpty(list); // true
  • 如果这个数据是数组类型的,可以使用ObjectUtils工具类
// 数组
Object[] objArr = null;
ObjectUtils.isEmpty(objArr); // true

ObjectUtils中的isEmpty()这个方法可以对字符串,数组,Map集合,List集合进行是否等于null的判断

这个isEmpty方法为什么能判断这么多的数据类型,我们看下源码

public static boolean isEmpty(@Nullable Object obj) {
    // 判断obj是否为null,如果是直接f
    if (obj == null) {
      return true;
    }
    // 判断obj是否是Optional的子类
    if (obj instanceof Optional) {
      // 如果是,则调用isPresent方法判断是否为null
      return !((Optional) obj).isPresent();
    }
    // 判断obj是否是CharSequence的子类
    if (obj instanceof CharSequence) {
      // 如果是,则获取长度,长度等于0时,就认为这个obj是空字符串
      return ((CharSequence) obj).length() == 0;
    }
    // 判断obj是否为数组
    if (obj.getClass().isArray()) {
      // 数组的长度等于0就认为这个数组是空数组
      return Array.getLength(obj) == 0;
    }
    // 判断obj是否为Collection集合的子类
    if (obj instanceof Collection) {
      // 用Collection子类的isEmpty方法判断集合是否为空
      return ((Collection) obj).isEmpty();
    }
    // 判断obj是否为Map接口的子类
    if (obj instanceof Map) {
      // 如果是,则进行强转,并用子类的isEmpty方法判断集合是否为空
      return ((Map) obj).isEmpty();
    }

    // else
    return false;
}

针对Map集合是否为空为null的判断

Map<String,Object> map = Collections.emptyMap();
CollectionUtils.isEmpty(map);

CollectionUtils工具类中isEmpty判断方法源码:

public static boolean isEmpty(@Nullable Map<?, ?> map) {
    return map == null || map.isEmpty();
}

CollectionUtils工具类中还有针对List集合的isEmpty方法:

List<Integer> list = null;
// 使用CollectionUtils工具类判断list集合是否为空
CollectionUtils.isEmpty(list); // true

针对List集合的isEmpty源码

public static boolean isEmpty(@Nullable Collection<?> collection) {
    return collection == null || collection.isEmpty();
}

标签:Map,逻辑,判断,java,return,isEmpty,obj,null
From: https://blog.csdn.net/juanmiao/article/details/145285220

相关文章

  • js条件判断的类python海象写法
    判断里面赋值就OK啦varss="higooh"constreg=/\w{2}/gconstii=ss.matchAll(reg)while(_=ii.next()){if(_.done)breakconsole.log(_.value,_.done)ss=ss.replace(_.value[0],"xx")}//console.log(_)console.log(......
  • 【转】[JavaScript] textContent 用法
    转自:kimi.ai在JavaScript中,textContent是一个用于操作DOM元素文本内容的属性。它允许你获取或设置指定元素及其子元素的文本内容。以下是关于textContent的详细用法和特点:1.获取文本内容textContent可以获取指定元素及其所有子元素的文本内容,忽略HTML标签。例如:HTM......
  • 【转】[JavaScript] try...catch 语法
    转自:kimi.ai在JavaScript中,try...catch是一种用于捕获同步错误的语法结构。它允许你尝试执行一段代码,并在代码运行过程中捕获可能出现的异常(错误),从而避免程序因为未处理的错误而崩溃。通过try...catch,你可以对错误进行处理,例如记录错误信息、提供默认值或执行替代逻辑。基本......
  • Java多线程循环list集合
    1.Java多线程基本概念在开始之前,先简单了解一下Java的多线程。如果一个应用程序在执行多个任务时,每个任务都是独立的,那么我们就可以把这些任务放在多个线程中并发执行。Java通过Thread类和Runnable接口提供了创建和管理线程的技术。1.1创建线程创建线程最常见的方法有两......
  • 基于Java的学生选课系统设计与实现 毕业设计源码13931
    摘要在当今快节奏的高等教育环境中,学生选课系统的重要性愈发凸显。曾经,学生在选课时需要排长队、填表格,繁琐而低效。为解决这一难题,本研究设计并实现了一套智能化学生选课系统。这一系统不仅为学生提供了便捷的选课服务,也为教务管理带来了新的机遇。通过系统的开发,我旨在提......
  • 请解释下href="javascript:void(0)"和href="#"的区别是什么?
    在前端开发中,href="javascript:void(0)"和href="#"都是常见的用于阻止链接默认行为的技巧,但它们之间有一些重要的区别。功能:href="javascript:void(0)":这个语句会执行JavaScript函数void(0),该函数返回undefined,从而阻止链接的默认行为(即跳转到新页面或重新加载当前......
  • 「youlai-boot」入门篇:从0到1搭建 Java、Spring Boot、Spring Security 企业级权限管
    ......
  • 招高级Java一枚(广州)英语口语好可以是中级
    岗位职责  1、参与自研SAAS平台项目的设计与开发工作,包括数据库设计、编码和单元测试等工作2、独立完成某一业务模块整体方案,包括:计划、流程、业务影响范围、相关技术选择,保证所负责系统的安全性、稳定性及可扩展性3、深入了解业务知识,并能敏锐发现业务痛点4、有中大......
  • 05JavaWeb——SpringBootWeb请求响应
    前言在上一次的课程中,我们开发了springbootweb的入门程序。基于SpringBoot的方式开发一个web应用,浏览器发起请求/hello后,给浏览器返回字符串“HelloWorld~”。其实呢,是我们在浏览器发起请求,请求了我们的后端web服务器(也就是内置的Tomcat)。而我们在开发web程序时呢,......
  • JavaFX + Maven实战:可内网联机的多人在线五子棋游戏开发全解析(附Socket通信与EXE打包)
    目录1.项目背景与需求分析1.1为何选择内网联机五子棋?1.2内网联机方案的附加价值2.技术选型与开发环境2.1GUI框架选型:JavaFXvsSwing深度对比2.1.1渲染性能与现代化特性2.1.2渲染性能与现代化特性2.2构建工具:Maven3.8.8核心优势2.2.1依赖管理自动化2.2.2EXE......