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

    技术2022-05-11  53

    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)