关闭

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

标签: wrapperexceptionconstructorsystemclassnull
733人阅读 评论(0) 收藏 举报
分类:
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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:38961次
    • 积分:493
    • 等级:
    • 排名:千里之外
    • 原创:6篇
    • 转载:27篇
    • 译文:0篇
    • 评论:1条
    文章分类