自写的校验所有类型是否为null的工具类, 懒人福音,嘎嘎好用。

  1 /**
2 * 一个校验对象是否为null的豪华大礼包
3 * 可以校验:Collection,Map,String,Enumeration,Iterator,以及所有数组类型
4 *
5 */
6 public final class ValidatorPlus {
7
8 /**
9 * 禁止实例化这个类
10 */
11 private ValidatorPlus() {
12 //AssertionError不是必须的. 但它可以避免不小心在类的内部调用构造器. 保证该类在任何情况下都不会被实例化.
13 throw new AssertionError(getClass().getName() + " 禁止实例化!");
14 }
15
16 /**
17 * 判断对象是否不为Null或者Empty,调用 #isNull(Object) 方法
18 *
19 * @param value 可以是Collection,Map,String,Enumeration,Iterator,以及所有数组类型
20 * @return 如果是null, 返回false
21 * 如果是空也返回false
22 * 其他情况返回true
23 * 如果不是上述类型,不判断empty,返回true
24 */
25 public static boolean isNotNull(Object value) {
26 return !isNull(value);
27 }
28
29 /**
30 * 判断对象是否为Null或者Empty
31 *
32 * @param value 可以是Collection,Map,String,Enumeration,Iterator,以及所有数组类型
33 * @return 如果是null, 返回true
34 * 其他情况返回false
35 * 如果不是上述类型,不判断empty,返回false
36 */
37 public static boolean isNull(Object value) {
38 if (Objects.isNull(value)) {
39 return true;
40 }
41
42 // 字符串
43 if (value instanceof String) {
44 return isBlank(value.toString());
45 }
46
47 // 集合
48 if (value instanceof Collection) {
49 return ((Collection<?>) value).isEmpty();
50 }
51
52 // map
53 if (value instanceof Map) {
54 return ((Map<?, ?>) value).isEmpty();
55 }
56
57 // 枚举
58 if (value instanceof Enumeration) {
59 return !((Enumeration<?>) value).hasMoreElements();
60 }
61
62 // Iterator迭代器
63 if (value instanceof Iterator) {
64 return !((Iterator<?>) value).hasNext();
65 }
66
67 // 数组
68 if (arrayIsNull(value)) {
69 return true;
70 }
71 // 这里可以扩展
72 return false;
73 }
74
75 /**
76 * 数组 类型的验证,区分 primitive 和包装类型.
77 *
78 * @param value 可以是
79 * Object[] 二维数组属于这个类型
80 * byte[]
81 * boolean[]
82 * char[]
83 * int[]
84 * long[]
85 * short[]
86 * float[]
87 * double[]
88 * @return 如果是数组类型(区分 primitive和包装类型), 判断其length==0;
89 * 如果不是 直接返回false
90 */
91 private static boolean arrayIsNull(Object value) {
92 // 数组 Integer/String...自定义的对象User.等数组也 instanceof Object[]
93 if (value instanceof Object[]) {
94 return ((Object[]) value).length == 0;
95 }
96
97 // primitive ints
98 if (value instanceof int[]) {
99 return ((int[]) value).length == 0;
100 }
101
102 // primitive long
103 if (value instanceof long[]) {
104 return ((long[]) value).length == 0;
105 }
106
107 // primitive float
108 if (value instanceof float[]) {
109 return ((float[]) value).length == 0;
110 }
111
112 // primitive double
113 if (value instanceof double[]) {
114 return ((double[]) value).length == 0;
115 }
116
117 // primitive char
118 if (value instanceof char[]) {
119 return ((char[]) value).length == 0;
120 }
121
122 // primitive boolean
123 if (value instanceof boolean[]) {
124 return ((boolean[]) value).length == 0;
125 }
126
127 // primitive byte
128 if (value instanceof byte[]) {
129 return ((byte[]) value).length == 0;
130 }
131
132 // primitive short
133 if (value instanceof short[]) {
134 return ((short[]) value).length == 0;
135 }
136 return false;
137 }
138
139 /**
140 * <p>检查 String 是否为空格、空 ("") 或 null。</p>
141 *
142 * <pre>
143 * StringUtils.isBlank(null) = true
144 * StringUtils.isBlank("") = true
145 * StringUtils.isBlank(" ") = true
146 * StringUtils.isBlank("bob") = false
147 * StringUtils.isBlank(" bob ") = false
148 * </pre>
149 *
150 * @param str 要检查的 String 可能为 null
151 * @return <code>true</code> 如果 String 为 null、空或空格
152 */
153 private static boolean isBlank(String str) {
154
155 if (str == null || str.isEmpty()) {
156 return true;
157 }
158
159 for (int i = 0; i < str.length(); i++) {
160 if ((!Character.isWhitespace(str.charAt(i)))) {
161 return false;
162 }
163 }
164 return true;
165 }
166 }
 

java一个校验对象是否为null的豪华大礼包的更多相关文章

  1. 空对象模式(Null Object Pattern)

    空对象模式:用一个空对象来取代null实例的检查,空对象实现一个不做任何动作的关系.(消除如if(Object == null) 这样的检查null实例代码) 例子: public abstract ...

  2. Java判断对象是否为NULL

    Java使用反射判断对象是否为NULL 判断Java对象是否为null可以有两层含义: 第一层:  直接使用 object == null 去判断,对象为null的时候返回true,不为null的时候 ...

  3. java 将Map拷贝到另一个Map对象当中

      java 将Map拷贝到另一个Map对象当中 CreateTime--2018年6月4日09点46分 Author:Marydon 1.需求说明 将一个MapA对象中所有的键值对完全拷贝到另一个M ...

  4. java基础1.5版后新特性 自动装箱拆箱 Date SimpleDateFormat Calendar.getInstance()获得一个日历对象 抽象不要生成对象 get set add System.arrayCopy()用于集合等的扩容

    8种基本数据类型的8种包装类 byte Byte short Short int Integer long Long float Float double Double char Character ...

  5. Java判断对象是否为Null/空

    package com.taiping.test; import java.lang.reflect.Field; import java.lang.reflect.Type; /** * <p ...

  6. java实现下载器(以及创建一个URL对象)

    java实现下载器(以及创建一个URL对象) 1.思路讲解: (1)注意路径:是网络路径噢 (2)创建创建网路协议对象(远程对象):HttpURLConnection urlConnection (3 ...

  7. Bean-Query 一个把对象转换为Map的Java工具库

    刚开源了一个经过完整測试的Java工具类. 地址例如以下: https://github.com/Jimmy-Shi/bean-query 使用说明例如以下: Bean-query Click Her ...

  8. Java中new一个子类对象的同时并不会自动创建一个父类对象

    首先重申一个概念:子类会继承父类所有非私有成员变量和方法,包括父类的构造方法 当创建一个子类对象时,首先开辟内存,然后调用类的构造函数,这里的构造函数由两部分组成,一部分是从父类继承而来的父类的构造方 ...

  9. TypeLoadException: 未能从程序集“ECS.GUI.Define, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”中加载类型“ECS.GUI.Define.ArmgAimPos”,因为它在 4 偏移位置处包含一个对象字段,该字段已由一个非对象字段不正确地对齐或重叠

    TypeLoadException: 未能从程序集"ECS.GUI.Define, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null ...

  10. 深入Java虚拟机--判断对象存活状态

    程序计数器,虚拟机栈和本地方法栈 首先我们先来看下垃圾回收中不会管理到的内存区域,在Java虚拟机的运行时数据区我们可以看到,程序计数器,虚拟机栈,本地方法栈这三个地方是比较特别的.这个三个部分的特点 ...

随机推荐

  1. 使用 docker 搭建 MySQL 主从同步/读写分离

    拉取 MySQL 容器镜像 docker pull mysql:5.7 这里我使用的是 5.7 版本,如果你想要拉取最新版本的镜像,可以使用: docker pull mysql:latest 下载完 ...

  2. weixueyuan-Nginx负载均衡7

    https://www.weixueyuan.net/nginx/load_balanc/ Nginx负载均衡模块简述 Nginx 负载均衡是由代理模块和上游(upstream)模块共同实现的,Ngi ...

  3. ORACLE存储过程中使用游标+BULK COLLECT的应用

    经过半天的折腾,编译通过调试结果正确,掌握此过程中的知识点,oracle存储过程编写就应用到了90%. CREATE OR REPLACE PROCEDURE JUNAN.P_IPT_QUOTN_IN ...

  4. 基于deepseek模型知识库,Cherry Studio和AnythingLLM使用效果对比

    基于deepseek模型知识库,Cherry Studio和AnythingLLM使用效果对比 目       录 1.      使用效果对比基础 2.      Cherry Studio和Any ...

  5. WPF 创建自定义鼠标光标指针

    WPF Cursor类中的两个构造函数: public Cursor(Stream cursorStream) public Cursor(string cursorFile) 以上的构造函数所使用的 ...

  6. 5090D-deepseek-Anythingllm-Ollama运行测试

    ollama ollama配置环境变量 ollama地址与镜像 C:\Users\DK>curl http://10.208.10.240:11434 Ollama is running C:\ ...

  7. Linux服务器快速卸载安装node环境(简单上手)

    这篇文章主要介绍了Linux服务器快速卸载安装node环境(简单上手) 1.先卸载npm sudo npm uninstall npm -g 2.卸载node yum remove nodejs np ...

  8. 解决2023新版Edge浏览器页面加载不出来问题

    如果你遇到2023新版Edge浏览器页面无法加载的问题,可以尝试以下几种解决方法: 检查网络连接:确保你的网络连接正常,可以尝试打开其他网页或使用其他应用程序进行网络测试. 清除浏览器缓存:打开Edg ...

  9. 一文搞懂 APP 算法备案

    今天来给大家好好科普一下超重要的 APP 算法备案,这可是和我们日常使用 APP 以及 APP 运营都息息相关的知识点哦! 什么是算法备案 简单来讲,算法备案就相当于 APP 运营者要把自家 APP ...

  10. Spring Boot创建完项目运行Cannot determine embedded database driver class for database type NONE

    spring boot 创建项目引用mybatis后,直接运行会提示: Cannot determine embedded database driver class for database typ ...