package com.able.util; import java.util.Collection; import java.util.Enumeration; import java.util.Iterator; import java.util.Map; /** * <b>核心类</b>,判断对象是否为null或者Empty. * * <ol> * <li>{@link #isNullOrEmpty(Object)} 判断对象是否是null或者空</li> * <li>{@link #isNotNullOrEmpty(Object)}判断对象是否不是null或者不是空</li> * </ol> * * <h3>对于empty的判断,使用以下逻辑/语法/规则:</h3> * * <blockquote> * <ol> * <li>{@link Collection},使用其 {@link Collection#isEmpty()};</li> * <li>{@link Map},使用其 {@link Map#isEmpty()};</li> * <li>{@link String},使用 {@link String#trim()}{@code .length()<=0}效率高;</li> * <li>{@link Enumeration},使用 {@link Enumeration#hasMoreElements()};</li> * <li>{@link Iterator},使用 {@link Iterator#hasNext()};</li> * <li><code>Object[]</code>,判断length==0;注:二维数组不管是primitive 还是包装类型,都instanceof Object[];</li> * <li><code>byte[]</code>,判断length==0;</li> * <li><code>boolean[]</code>,判断length==0;</li> * <li><code>char[]</code>,判断length==0;</li> * <li><code>int[]</code>,判断length==0;</li> * <li><code>short[]</code>,判断length==0;</li> * <li><code>float[]</code>,判断length==0;</li> * <li><code>double[]</code>,判断length==0;</li> * </ol> * </blockquote> * * @see String#trim() * @see Map#isEmpty() * @see Collection#isEmpty() * @see Enumeration#hasMoreElements() * @see Iterator#hasNext() * @since 1.0.0 */ public final class Validator{ /** Don't let anyone instantiate this class. */ private Validator(){ //AssertionError不是必须的. 但它可以避免不小心在类的内部调用构造器. 保证该类在任何情况下都不会被实例化. //see 《Effective Java》 2nd throw new AssertionError("No " + getClass().getName() + " instances for you!"); } /** * 判断对象是否为Null或者Empty * * <h3>对于empty的判断,使用以下逻辑/语法/规则:</h3> * * <blockquote> * <ol> * <li>{@link Collection},使用其 {@link Collection#isEmpty()};</li> * <li>{@link Map},使用其 {@link Map#isEmpty()};</li> * <li>{@link String},使用 {@link String#trim()}{@code .length()<=0}效率高;</li> * <li>{@link Enumeration},使用 {@link Enumeration#hasMoreElements()};</li> * <li>{@link Iterator},使用 {@link Iterator#hasNext()};</li> * <li><code>Object[]</code>,判断length==0;注:二维数组不管是primitive 还是包装类型,都instanceof Object[];</li> * <li><code>byte[]</code>,判断length==0;</li> * <li><code>boolean[]</code>,判断length==0;</li> * <li><code>char[]</code>,判断length==0;</li> * <li><code>int[]</code>,判断length==0;</li> * <li><code>short[]</code>,判断length==0;</li> * <li><code>float[]</code>,判断length==0;</li> * <li><code>double[]</code>,判断length==0;</li> * </ol> * </blockquote> * * @param value * 可以是Collection,Map,String,Enumeration,Iterator,以及所有数组类型 * @return 如果是null,返回true<br> * 如果是empty也返回true<br> * 其他情况返回false<br> * 如果不是上述类型,不判断empty,返回false * @see org.apache.commons.collections.CollectionUtils#isEmpty(Collection) * @see org.apache.commons.collections.CollectionUtils#isNotEmpty(Collection) * @see org.apache.commons.collections.MapUtils#isEmpty(Map) * @see org.apache.commons.collections.MapUtils#isNotEmpty(Map) * @see org.apache.commons.lang.ArrayUtils#isEmpty(byte[]) * @see org.apache.commons.lang.ArrayUtils#isEmpty(boolean[]) * @see org.apache.commons.lang.ArrayUtils#isEmpty(char[]) * @see org.apache.commons.lang.ArrayUtils#isEmpty(int[]) * @see org.apache.commons.lang.ArrayUtils#isEmpty(long[]) * @see org.apache.commons.lang.ArrayUtils#isEmpty(short[]) * @see org.apache.commons.lang.ArrayUtils#isEmpty(float[]) * @see org.apache.commons.lang.ArrayUtils#isEmpty(double[]) * @see org.apache.commons.lang.ArrayUtils#isEmpty(Object[]) * @see org.apache.commons.lang.StringUtils#isBlank(String) * @see org.apache.commons.lang.StringUtils#isEmpty(String) */ public static final boolean isNullOrEmpty(Object value){ if (null == value){ return true; } // ***************************************************************************** // 字符串 if (value instanceof String){// 比较字符串长度, 效率高 return value.toString().trim().length() <= 0; } // 集合 if (value instanceof Collection){ return ((Collection<?>) value).isEmpty(); } // map if (value instanceof Map){ return ((Map<?, ?>) value).isEmpty(); } // 枚举 if (value instanceof Enumeration){ return !((Enumeration<?>) value).hasMoreElements(); } // Iterator迭代器 if (value instanceof Iterator){ return !((Iterator<?>) value).hasNext(); } boolean arrayFlag = arrayIsNullOrEmpty(value); if (arrayFlag){ return true; } // 这里可以扩展 return false; } /** * 判断对象是否不为Null或者Empty,调用 !{@link #isNullOrEmpty(Object)} 方法 <br> * * <h3>对于empty的判断,使用以下逻辑/语法/规则:</h3> * * <blockquote> * <ol> * <li>{@link Collection},使用其 {@link Collection#isEmpty()};</li> * <li>{@link Map},使用其 {@link Map#isEmpty()};</li> * <li>{@link String},使用 {@link String#trim()}{@code .length()<=0}效率高;</li> * <li>{@link Enumeration},使用 {@link Enumeration#hasMoreElements()};</li> * <li>{@link Iterator},使用 {@link Iterator#hasNext()};</li> * <li><code>Object[]</code>,判断length==0;注:二维数组不管是primitive 还是包装类型,都instanceof Object[];</li> * <li><code>byte[]</code>,判断length==0;</li> * <li><code>boolean[]</code>,判断length==0;</li> * <li><code>char[]</code>,判断length==0;</li> * <li><code>int[]</code>,判断length==0;</li> * <li><code>short[]</code>,判断length==0;</li> * <li><code>float[]</code>,判断length==0;</li> * <li><code>double[]</code>,判断length==0;</li> * </ol> * </blockquote> * * @param value * 可以是Collection,Map,String,Enumeration,Iterator,以及所有数组类型 * @return 如果是null,返回false<br> * 如果是空也返回false<br> * 其他情况返回true<br> * 如果不是上述类型,不判断empty,返回true * @see org.apache.commons.collections.CollectionUtils#isEmpty(Collection) * @see org.apache.commons.collections.CollectionUtils#isNotEmpty(Collection) * @see org.apache.commons.collections.MapUtils#isEmpty(Map) * @see org.apache.commons.collections.MapUtils#isNotEmpty(Map) * @see org.apache.commons.lang.ArrayUtils#isEmpty(byte[]) * @see org.apache.commons.lang.ArrayUtils#isEmpty(boolean[]) * @see org.apache.commons.lang.ArrayUtils#isEmpty(char[]) * @see org.apache.commons.lang.ArrayUtils#isEmpty(int[]) * @see org.apache.commons.lang.ArrayUtils#isEmpty(long[]) * @see org.apache.commons.lang.ArrayUtils#isEmpty(short[]) * @see org.apache.commons.lang.ArrayUtils#isEmpty(float[]) * @see org.apache.commons.lang.ArrayUtils#isEmpty(double[]) * @see org.apache.commons.lang.ArrayUtils#isEmpty(Object[]) * @see org.apache.commons.lang.StringUtils#isBlank(String) * @see org.apache.commons.lang.StringUtils#isEmpty(String) */ public static final boolean isNotNullOrEmpty(Object value){ return !isNullOrEmpty(value); } /** * 数组 类型的验证,区分 primitive 和包装类型. * * @param value * 可以是 * <ul> * <li>Object[] 二维数组属于这个类型</li> * <li>byte[]</li> * <li>boolean[]</li> * <li>char[]</li> * <li>int[]</li> * <li>long[]</li> * <li>short[]</li> * <li>float[]</li> * <li>double[]</li> * </ul> * @return 如果是数组类型(区分 primitive和包装类型),判断其length==0;<br> * 如果不是 直接返回false * @see org.apache.commons.lang.ArrayUtils#isEmpty(byte[]) * @see org.apache.commons.lang.ArrayUtils#isEmpty(boolean[]) * @see org.apache.commons.lang.ArrayUtils#isEmpty(char[]) * @see org.apache.commons.lang.ArrayUtils#isEmpty(int[]) * @see org.apache.commons.lang.ArrayUtils#isEmpty(long[]) * @see org.apache.commons.lang.ArrayUtils#isEmpty(short[]) * @see org.apache.commons.lang.ArrayUtils#isEmpty(float[]) * @see org.apache.commons.lang.ArrayUtils#isEmpty(double[]) * @see org.apache.commons.lang.ArrayUtils#isEmpty(Object[]) * @since 1.0.7 */ private static boolean arrayIsNullOrEmpty(Object value){ // *********************************************************** // 数组 Integer/String...自定义的对象User.等数组也 instanceof Object[] if (value instanceof Object[]){ return ((Object[]) value).length == 0; } // *********************************************************** // primitive ints if (value instanceof int[]){ return ((int[]) value).length == 0; } // primitive long if (value instanceof long[]){ return ((long[]) value).length == 0; } // primitive float if (value instanceof float[]){ return ((float[]) value).length == 0; } // primitive double if (value instanceof double[]){ return ((double[]) value).length == 0; } // primitive char if (value instanceof char[]){ return ((char[]) value).length == 0; } // primitive boolean if (value instanceof boolean[]){ return ((boolean[]) value).length == 0; } // primitive byte if (value instanceof byte[]){ return ((byte[]) value).length == 0; } // primitive short if (value instanceof short[]){ return ((short[]) value).length == 0; } return false; } }
相关推荐
Java-lib-annotated-validator是一个开源项目,专注于提供一个基于注解的Java验证程序库。它利用自定义的运行时注释和Java的反射机制来实现数据验证,这为开发者提供了更加灵活和方便的方式来验证对象属性的正确性。...
JSON Schema 是一个JSON格式的规范,用于定义JSON数据的结构和限制,类似于XML Schema和DTD(文档类型定义)。它提供了一种验证JSON数据是否符合预定义规则的方法,这对于API开发、数据交换和JSON数据存储非常有用。...
Java验证字符串是否为JSON格式
Fluent-validator 是一套 Java 的轻量验证框架,提供流式风格(Fluent Interface)的调用体验,类似 JDK8 stream式的 API,支持注解式验证器,支持 JSR303 -Bean Validation 标准最佳实现 Hibernate Validator 集成...
在Java世界中,`Validator` 特别指的是JSR 303/JSR 349(Bean Validation)规范的实现,如Hibernate Validator。这个规范为Java应用程序提供了统一的数据校验机制,可以应用于模型对象的属性上,以验证用户输入或...
Hibernate Validator 是一个基于 Java Bean Validation 规范的实现,它提供了一种在 Java 应用程序中进行数据校验的强大工具。这个规范定义了一种标准的注解,使得开发者可以方便地对对象的属性、方法等进行约束验证...
这些约束可以是基本类型的验证,如非空、长度限制、数字范围等,也可以是自定义的复杂逻辑验证。 **Hibernate Validator 实现** Hibernate Validator 是JSR 303/349规范的主要实现,它提供了一系列预定义的验证...
java验证器Validator包及依赖包,亲测可用! hibernate-validator-5.1.3.Final.jar;classmate-0.8.0.jar;jboss-logging-3.2.0.Final.jar;validation-api-1.1.0.final.jar
`Validator框架`是一种广泛应用于Java开发中的数据验证工具,它主要负责在业务处理前检查用户输入的数据是否符合预设的规则,确保数据的准确性和安全性。这个框架是Java Bean Validation的实现,符合JSR 303和JSR ...
4. **Hibernate Validator**: Hibernate Validator是Java Bean Validation规范的参考实现,它可以为对象属性定义一系列的校验规则,如非空、长度限制、数字范围等。这些规则通过注解定义在字段或方法上,并在运行时...
`Validator`框架是Java Bean Validation(JSR 303/349/380)规范的实现,它提供了一种声明式的验证方法,允许开发者通过注解在Java对象的属性上定义验证规则。这些注解包括`@NotNull`、`@Size`、`@Pattern`等,使得...
`Validator框架`是Java开发中用于数据验证的重要工具,尤其在基于Struts的Web应用程序中,它扮演着不可或缺的角色。Struts是一个流行的MVC(Model-View-Controller)框架,帮助开发者构建健壮且可维护的Java Web应用...
自定义Validator通常需要实现`org.springframework.validation.Validator`接口,并覆盖`supports`和`validate`方法。 ```java public class CustomUserValidator implements Validator { @Override public ...
在本文中,我们将深入探讨Hibernate Validator的基本概念、内置约束、自定义约束以及注解的使用,帮助新手入门并巩固高手的技能。 一、Hibernate Validator 简介 Hibernate Validator是Hibernate项目的一部分,...
JSON-Validator-Java项目提供了一个方便的工具,帮助开发者在Java环境中对JSON对象进行有效性和正确性验证。 JSON-Validator-Java项目通常包含以下关键组成部分: 1. **JSON Schema**: JSON Schema是一套JSON格式...
在本文中,我们将深入探讨Vue Validator的使用方法及其核心特性。 首先,为了使用Vue Validator,我们需要在项目中引入Vue.js和Vue Validator的库文件。在示例代码中,引用了Vue 1.0.24和Vue Validator 2.1.3的CDN...
bean-validator不仅仅提供了基本的验证功能,还可以与其他Spring组件如Spring Data JPA集成,实现数据库级别的验证。此外,它还可以与Apache Commons Lang3、Hibernate Validator等库配合使用,扩展更多的验证功能。...
`Validator`是一个强大的验证框架,广泛应用于Java开发中,它为开发者提供了丰富的验证规则和便捷的API,使得数据验证过程更加高效和规范。在本文中,我们将深入探讨`Validator`框架的基本概念、核心功能以及如何在...
总之,通过使用Hibernate Validator,我们可以轻松地在Java应用中实现强大的数据校验功能,提高代码的健壮性和用户体验。同时,由于其注解驱动的特性,使得代码更易于理解和维护。结合Spring Boot,开发者可以快速地...
4. **后续学习路径**:掌握基本的约束定义和验证方法后,可以进一步探索如何使用分组、自定义错误消息以及更高级的功能,如方法级验证和程序化约束定义。 **二、逐步解析验证过程** 1. **定义约束**: - 字段级...