如何判断一个对象是否是基本类型的Wrapper

java代码: 


    public static void main ( String [ ] args ) throws Exception {
        System. out. println (isWrapClass ( Long. class ) );
        System. out. println (isWrapClass ( String. class ) );
    }

    public static boolean isWrapClass ( Class clz ) {
        try {
            return ( ( Class ) clz. getField ("TYPE" ). get ( null ) ). isPrimitive ( );
        } catch ( Exception e ) {
            return false;
        }
    }

 

 

java代码: 


import java. lang. reflect. Constructor;
import java. lang. reflect. Field;

/**
* 防止一个持久化实体对象实例的属性中出现null的工具类
* @author wuyongwei
*
*/


public class PreventNullUtil {

       
        /**
        * 利用反射把对象实例的为null的自定义数据类型属性设置为非null,对java.lang和java.util下的java自带数据类型不起作用
        * <br>因为使用了反射和递归,应谨慎使用
        * @param obj 需要防止出现null属性的对象实例
        */

        public static void preventNull ( Object obj ) {
                Class objClass = obj. getClass ( );
                for ( int i = 0; i < objClass. getDeclaredFields ( ). length; i++ ) {
                        boolean accessible = false;
                        Field field = objClass. getDeclaredFields ( ) [i ];
                        accessible = field. isAccessible ( );
                        Class fieldType = field. getType ( );
                        Object fieldValue = null;
                        Constructor [ ] constructors;
                        //如果是基本类型,跳过
                        if (fieldType. isPrimitive ( ) ) {
                                continue;
                        }
                        // 如果是lang包或者util包下面的类,可以跳过
                        // 这里不严谨,不过对于实体而言可以接受,                       
                        // 因为实体的属性一般不是这两个包下面的¾褪Ç自定义的包
                        if (fieldType. getPackage ( ). getName ( ). equals ("java. lang" ) ) {
                                continue;
                        }
                        if (fieldType. getPackage ( ). getName ( ). equals ("java. util" ) ) {
                                continue;
                        }
                        System. out. println ("处理属性:" + field. getName ( ) );
                        if (accessible == false ) {
                                field. setAccessible ( true );
                        }
                        try {
                                fieldValue = field. get (obj );
                        } catch ( Exception e ) {
                                // TODO: handle exception,这里要不要抛出异常?
                                System. err. println ("无法读取属性 " + field. getName ( ) + " 的值,错误:"
                                                + e. getMessage ( ) );
                                e. printStackTrace ( );
                        }
                        if (fieldValue == null ) {
                                constructors = fieldType. getConstructors ( );
                                for ( int j = 0; j < constructors. length; j++ ) {
                                        Constructor constructor = constructors [j ];
                                        // 只有空构造器才可以方便动态新建实例
                                        if (constructor. getParameterTypes ( ). length== 0 ) {
                                                try {
                                                        Object newValue = fieldType. newInstance ( );
                                                        field. set (obj,newValue );
                                                        System. out. println ("属性设置成功:" + field. getName ( ) );
                                                        //»挂ª防止新建的这个实例的属性如果是自定义类型的话可能存在的null值,递归调用
                                                        preventNull (newValue );
                                                        System. out. println ("属性递归设置成功:" + field. getName ( ) );
                                                        break;
                                                } catch ( Exception e ) {
                                                        // TODO: handle exception,这里要不要抛出异常?
                                                        System. err. println ("设置属性 '" + field.getName() + "' 出错,错误:" + e. getMessage ( ) );
                                                        e. printStackTrace ( );
                            break;
                                                }
                                        }
                                }
                        }
                        System. out. println ("处理属性结束:" + field. getName ( ) );
                        field. setAccessible (accessible );
                }
        }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值