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虚拟机的运行时数据区我们可以看到,程序计数器,虚拟机栈,本地方法栈这三个地方是比较特别的.这个三个部分的特点 ...
随机推荐
- HashMap知识点
1.基本数据结构 1. JDK1.7 数组 + 链表 2. JDK1.8 数组 + (链表 | 红黑树) 2.树化与退化 1.树化意义 1.红黑树用来避免Dos攻击,防止链表过长时性能下降,树化应该是 ...
- NTRU
介绍 NTRU(Number Theory Research Unit),NTRU是一个带有专利保护的开源公开密钥加密系统,使用基于格的加密算法来加密数据.它包括两部分算法:NTRUEncrypt用来 ...
- 从倒水问题到盛最多水的容器:一道经典的双指针应用题|LeetCode 11 盛最多水的容器
LeetCode 11 盛最多水的容器 点此看全部题解 LeetCode必刷100题:一份来自面试官的算法地图(题解持续更新中) 生活中的算法 你有没有遇到过这样的场景:家里要举办派对,需要准备一个大 ...
- 如何在WPS和Word/Excel中直接使用DeepSeek功能
以下是将DeepSeek功能集成到WPS中的详细步骤,无需本地部署模型,直接通过官网连接使用:1. 下载并安装OfficeAI插件 (1)访问OfficeAI插件下载地址:https://www.of ...
- WPF 创建自定义鼠标光标指针
WPF Cursor类中的两个构造函数: public Cursor(Stream cursorStream) public Cursor(string cursorFile) 以上的构造函数所使用的 ...
- 【计算机】常见CPU指令集发展及其关系
[计算机]常见 CPU 指令集发展及其关系 CPU 与指令集 任何计算机都有一块 CPU,CPU 有其支持的指令集,根据指令集间的兼容性,一种 CPU 可能同时支持多种指令集. 指令集中记录了 CPU ...
- 傻妞教程——对接mongoDB使用返佣系统
使用docker安装mongo 1.安装 1.1 拉取mongo镜像 docker pull mongo:4.4 1.2 创建mongo数据持久化目录 mkdir -p /docker_volume/ ...
- Ansible - [08] 模块应用
firewalld 模块 使用firewalld模块可以配置防火墙策略 [root@control ~]# cat ~/ansible/firewall.yml --- - hosts: agent ...
- Trae AI 工具使用记录--0手写代码创建桌面代办事项软件
使用的AI工具是最近字节跳动出品的Trae工具. 第一步 下载IDE,Trae(官网链接 https://www.trae.ai) 安装完成后注册.登录,可以直接使用github账号.第一个坑就是目前 ...
- python文件不显示cmd黑窗口,打包py,pyw文件为exe文件
问题描述:编写的python文件为定时任务,需要长时间运行,但是打开的cmd黑色窗口看起来很不舒服,于是打包为exe文件,隐藏cmd黑色窗口 步骤:1.使用pip install pyinstalle ...