自写的校验所有类型是否为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. excel表格里面数据统计有几个(相同的算1个)

    例如:1 2 3 4 5 6 7 1 2 3 统计出来的结果 是 7个! 相同的算1个. 假设数据在A1:A10区域内,在B1单元格中显示结果,则在B1单元格中输入公式: =SUMPRODUCT(1/ ...

  2. 容器的优势,在Docker中运行Tomcat

    本文分享自天翼云开发者社区<容器的优势,在Docker中运行Tomcat>,作者:d****e 一.容器与虚拟机的区别是什么 虚拟机:虚拟机是通过Hypervisor(虚拟机管理系统,常见 ...

  3. 一探究竟!天翼云2023MWC展区“亮”了!

    6月28日,2023MWC上海世界移动通信大会(简称"MWC上海")在上海新国际博览中心启幕.中国电信开设"数智万融 畅享未来"主题展区,从科技创新.安全筑防及 ...

  4. ClickHouse 常用语句

    一.常用操作 1.建数据库 连接数据库:clickhouse-client -h 10.0.0.0 --port 9000 -u test_user --password test_password  ...

  5. 用户信息授权报错“无效的AppID参数”问题排查解决过程

    今天记一个支付宝报错"无效的AppID参数"的问题排查解决过程,希望可以帮到大家. 报错产生 今天在测试支付宝用户信息授权 换取授权访问令牌 的时候,遇到了一个报错:"无 ...

  6. 替换JSONObject某个对象的值

    有时候我们只想替换JSONObject某个对象的值,不想把所有对象的值都列出来.那就用for循环把所有的值重新赋值一遍.再单独给需要赋值的对象重新赋值 JSONObject itemObject = ...

  7. 高效开发助手:深入了解Hutool工具库

    一.关于Hutool 1.1 简介 Hutool​是一个功能丰富且易用的Java工具库,通过诸多实用工具类的使用,旨在帮助开发者快速.便捷地完成各类开发任务. 这些封装的工具涵盖了字符串.数字.集合. ...

  8. 百万架构师第四十四课:Nginx:Nginx 的扩展-OpenRestry|JavaGuide

    百万架构师系列文章阅读体验感更佳 原文链接:https://javaguide.net 公众号:不止极客 Nginx 的扩展-OpenRestry 课程目标 Nginx 进程模型简介 Nginx 的高 ...

  9. Informatica - [01] 概述

    题记部分 001 || 概述   Informatica 是一家全球领先的数据集成和数据管理解决方案提供商,致力于为客户提供具有强大的元数据管理.数据集成和个性化分析递送功能.Informatica的 ...

  10. oracle - [11] 那些年使用的emp表和dept表

    那些年在学习编程时,Oracle自带的emp表和dept表,本文进行整理和记录,以便于在今后的学习和工作中作为示例数据. 雇员表(emp) CREATE TABLE EMP( EMPNO NUMBER ...