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

转载 2006年06月13日 16:40:00
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);
                }
        }

}

相关文章推荐

java 判断对象是否是某个类的类型两种方法

一、 instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。  用法: ...

C#用反射判断一个类型是否是Nullable同时获取它的根类型

 在我们的应用程序中我们使用类描述我们的业务对象,为我们产生一些报表之类的,那就依赖大量不同的对象,我们创建一个帮助方法来转换我们的业务对象,或是一个List的业务对象到DataTables. ...

集合中装载对象和基本类型的小问题

// ======================================装载基本类型=====================================================...

AOP日志 记录方法参数名及对应值(包括对象和基本类型)

最近在优化日志打印内容,能够记录方法参数名及对应值,对现有贴子进行代码优化,贴上代码片段。

对象跟基本类型之间的转换

1,对象跟基本类型之间的转换:  不管何时,只是对象非空,在布尔环境中都为true.  如;  new Boolean(false);  new Number(0);  new String...

java面向对象高级特性-4.1基本类型包装类

4.1基本数据类型包装类有时我们需要将基本类型的数据构成一个对象来使用,有时要将对象中保存的基本数据类型的数据提取出来,这种基本数据类型数据与对象类型数据的相互转换,就需要基本数据类型的包装类。 将基...

struts2如何接受非基本类型对象数组或集合

struts2接受非基本类型对象数组或集合

JNI中如何在本地代码C++中操作java中的基本类型的数组以及对象数组

功能:通过C++本地代码将java中的数组进行排序,并重新赋值给data数组,java输出后是排好序的数组 package jni; import java.util.Random; p...

JavaScript学习笔记(八) 基本类型包装器和Error对象

Primitive Wrappers(基本类型包装器) JavaScript有五种基本类型:number,string,boolean,null和undefined; 除了null和undefined...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)