`
bugyun
  • 浏览: 559112 次
社区版块
存档分类
最新评论

Java 基本类型非null 公用方法Validator

    博客分类:
  • Java
 
阅读更多
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验证程序库.zip

    Java-lib-annotated-validator是一个开源项目,专注于提供一个基于注解的Java验证程序库。它利用自定义的运行时注释和Java的反射机制来实现数据验证,这为开发者提供了更加灵活和方便的方式来验证对象属性的正确性。...

    JSON Schema 校验库——json-schema-validator(java版本).rar

    JSON Schema 是一个JSON格式的规范,用于定义JSON数据的结构和限制,类似于XML Schema和DTD(文档类型定义)。它提供了一种验证JSON数据是否符合预定义规则的方法,这对于API开发、数据交换和JSON数据存储非常有用。...

    JsonValidator.java

    Java验证字符串是否为JSON格式

    Java轻量验证框架Fluent-validator.zip

    Fluent-validator 是一套 Java 的轻量验证框架,提供流式风格(Fluent Interface)的调用体验,类似 JDK8 stream式的 API,支持注解式验证器,支持 JSR303 -Bean Validation 标准最佳实现 Hibernate Validator 集成...

    Validator

    在Java世界中,`Validator` 特别指的是JSR 303/JSR 349(Bean Validation)规范的实现,如Hibernate Validator。这个规范为Java应用程序提供了统一的数据校验机制,可以应用于模型对象的属性上,以验证用户输入或...

    Hibernate Validator 小例子

    Hibernate Validator 是一个基于 Java Bean Validation 规范的实现,它提供了一种在 Java 应用程序中进行数据校验的强大工具。这个规范定义了一种标准的注解,使得开发者可以方便地对对象的属性、方法等进行约束验证...

    hibernate validator jsr303

    这些约束可以是基本类型的验证,如非空、长度限制、数字范围等,也可以是自定义的复杂逻辑验证。 **Hibernate Validator 实现** Hibernate Validator 是JSR 303/349规范的主要实现,它提供了一系列预定义的验证...

    java验证器Validator包及依赖包,亲测可用

    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框架

    `Validator框架`是一种广泛应用于Java开发中的数据验证工具,它主要负责在业务处理前检查用户输入的数据是否符合预设的规则,确保数据的准确性和安全性。这个框架是Java Bean Validation的实现,符合JSR 303和JSR ...

    java 利用POI对Execel表格的统一导入与校验(利用Hibernate Validator)

    4. **Hibernate Validator**: Hibernate Validator是Java Bean Validation规范的参考实现,它可以为对象属性定义一系列的校验规则,如非空、长度限制、数字范围等。这些规则通过注解定义在字段或方法上,并在运行时...

    validator验证原代码

    `Validator`框架是Java Bean Validation(JSR 303/349/380)规范的实现,它提供了一种声明式的验证方法,允许开发者通过注解在Java对象的属性上定义验证规则。这些注解包括`@NotNull`、`@Size`、`@Pattern`等,使得...

    validator框架的应用

    `Validator框架`是Java开发中用于数据验证的重要工具,尤其在基于Struts的Web应用程序中,它扮演着不可或缺的角色。Struts是一个流行的MVC(Model-View-Controller)框架,帮助开发者构建健壮且可维护的Java Web应用...

    spring_validator验证

    自定义Validator通常需要实现`org.springframework.validation.Validator`接口,并覆盖`supports`和`validate`方法。 ```java public class CustomUserValidator implements Validator { @Override public ...

    hibernate Validator 使用指南

    在本文中,我们将深入探讨Hibernate Validator的基本概念、内置约束、自定义约束以及注解的使用,帮助新手入门并巩固高手的技能。 一、Hibernate Validator 简介 Hibernate Validator是Hibernate项目的一部分,...

    JSON-Validator-Java:Java中的JSON对象验证

    JSON-Validator-Java项目提供了一个方便的工具,帮助开发者在Java环境中对JSON对象进行有效性和正确性验证。 JSON-Validator-Java项目通常包含以下关键组成部分: 1. **JSON Schema**: JSON Schema是一套JSON格式...

    Vue表单验证插件Vue Validator使用方法详解

    在本文中,我们将深入探讨Vue Validator的使用方法及其核心特性。 首先,为了使用Vue Validator,我们需要在项目中引入Vue.js和Vue Validator的库文件。在示例代码中,引用了Vue 1.0.24和Vue Validator 2.1.3的CDN...

    bean-validator

    bean-validator不仅仅提供了基本的验证功能,还可以与其他Spring组件如Spring Data JPA集成,实现数据库级别的验证。此外,它还可以与Apache Commons Lang3、Hibernate Validator等库配合使用,扩展更多的验证功能。...

    Validator验证架框api

    `Validator`是一个强大的验证框架,广泛应用于Java开发中,它为开发者提供了丰富的验证规则和便捷的API,使得数据验证过程更加高效和规范。在本文中,我们将深入探讨`Validator`框架的基本概念、核心功能以及如何在...

    Hibernate Validator校验参数疑点难点方法详解.docx

    总之,通过使用Hibernate Validator,我们可以轻松地在Java应用中实现强大的数据校验功能,提高代码的健壮性和用户体验。同时,由于其注解驱动的特性,使得代码更易于理解和维护。结合Spring Boot,开发者可以快速地...

    hibernate_validator 官方参考文档

    4. **后续学习路径**:掌握基本的约束定义和验证方法后,可以进一步探索如何使用分组、自定义错误消息以及更高级的功能,如方法级验证和程序化约束定义。 **二、逐步解析验证过程** 1. **定义约束**: - 字段级...

Global site tag (gtag.js) - Google Analytics