java一个校验对象是否为null的豪华大礼包
自写的校验所有类型是否为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的豪华大礼包的更多相关文章
- 空对象模式(Null Object Pattern)
空对象模式:用一个空对象来取代null实例的检查,空对象实现一个不做任何动作的关系.(消除如if(Object == null) 这样的检查null实例代码) 例子: public abstract ...
- Java判断对象是否为NULL
Java使用反射判断对象是否为NULL 判断Java对象是否为null可以有两层含义: 第一层: 直接使用 object == null 去判断,对象为null的时候返回true,不为null的时候 ...
- java 将Map拷贝到另一个Map对象当中
java 将Map拷贝到另一个Map对象当中 CreateTime--2018年6月4日09点46分 Author:Marydon 1.需求说明 将一个MapA对象中所有的键值对完全拷贝到另一个M ...
- 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 ...
- Java判断对象是否为Null/空
package com.taiping.test; import java.lang.reflect.Field; import java.lang.reflect.Type; /** * <p ...
- java实现下载器(以及创建一个URL对象)
java实现下载器(以及创建一个URL对象) 1.思路讲解: (1)注意路径:是网络路径噢 (2)创建创建网路协议对象(远程对象):HttpURLConnection urlConnection (3 ...
- Bean-Query 一个把对象转换为Map的Java工具库
刚开源了一个经过完整測试的Java工具类. 地址例如以下: https://github.com/Jimmy-Shi/bean-query 使用说明例如以下: Bean-query Click Her ...
- Java中new一个子类对象的同时并不会自动创建一个父类对象
首先重申一个概念:子类会继承父类所有非私有成员变量和方法,包括父类的构造方法 当创建一个子类对象时,首先开辟内存,然后调用类的构造函数,这里的构造函数由两部分组成,一部分是从父类继承而来的父类的构造方 ...
- 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 ...
- 深入Java虚拟机--判断对象存活状态
程序计数器,虚拟机栈和本地方法栈 首先我们先来看下垃圾回收中不会管理到的内存区域,在Java虚拟机的运行时数据区我们可以看到,程序计数器,虚拟机栈,本地方法栈这三个地方是比较特别的.这个三个部分的特点 ...
随机推荐
- 使用 docker 搭建 MySQL 主从同步/读写分离
拉取 MySQL 容器镜像 docker pull mysql:5.7 这里我使用的是 5.7 版本,如果你想要拉取最新版本的镜像,可以使用: docker pull mysql:latest 下载完 ...
- weixueyuan-Nginx负载均衡7
https://www.weixueyuan.net/nginx/load_balanc/ Nginx负载均衡模块简述 Nginx 负载均衡是由代理模块和上游(upstream)模块共同实现的,Ngi ...
- ORACLE存储过程中使用游标+BULK COLLECT的应用
经过半天的折腾,编译通过调试结果正确,掌握此过程中的知识点,oracle存储过程编写就应用到了90%. CREATE OR REPLACE PROCEDURE JUNAN.P_IPT_QUOTN_IN ...
- 基于deepseek模型知识库,Cherry Studio和AnythingLLM使用效果对比
基于deepseek模型知识库,Cherry Studio和AnythingLLM使用效果对比 目 录 1. 使用效果对比基础 2. Cherry Studio和Any ...
- WPF 创建自定义鼠标光标指针
WPF Cursor类中的两个构造函数: public Cursor(Stream cursorStream) public Cursor(string cursorFile) 以上的构造函数所使用的 ...
- 5090D-deepseek-Anythingllm-Ollama运行测试
ollama ollama配置环境变量 ollama地址与镜像 C:\Users\DK>curl http://10.208.10.240:11434 Ollama is running C:\ ...
- Linux服务器快速卸载安装node环境(简单上手)
这篇文章主要介绍了Linux服务器快速卸载安装node环境(简单上手) 1.先卸载npm sudo npm uninstall npm -g 2.卸载node yum remove nodejs np ...
- 解决2023新版Edge浏览器页面加载不出来问题
如果你遇到2023新版Edge浏览器页面无法加载的问题,可以尝试以下几种解决方法: 检查网络连接:确保你的网络连接正常,可以尝试打开其他网页或使用其他应用程序进行网络测试. 清除浏览器缓存:打开Edg ...
- 一文搞懂 APP 算法备案
今天来给大家好好科普一下超重要的 APP 算法备案,这可是和我们日常使用 APP 以及 APP 运营都息息相关的知识点哦! 什么是算法备案 简单来讲,算法备案就相当于 APP 运营者要把自家 APP ...
- Spring Boot创建完项目运行Cannot determine embedded database driver class for database type NONE
spring boot 创建项目引用mybatis后,直接运行会提示: Cannot determine embedded database driver class for database typ ...