如何判断一个对象是否是基本类型的Wrapper
来源:互联网 发布:mac配置php虚拟主机 编辑:程序博客网 时间:2024/04/29 21:38
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;
}
}
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);
}
}
}
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);
}
}
}
- 如何判断一个对象是否是基本类型的Wrapper
- 如何判断一个对象是否是基本类型的Wrapper
- Swift - 如何判断一个对象是否是某个类
- 判断对象类型是否是Array的js脚本函数
- 判断某个对象是否是某个类型的实例
- Swift:如何判断一个对象是否是某个类(或其子类)的实例
- js里怎么判断一个对象是否是日期类型,即Date,用typeof返回的是object
- js判断对象是否是某一类型
- 如何判断一个基本类型的变量的类型呢?
- 判断一个对象是否是另一个的前缀
- 判断一个对象是否是数组
- 判断一个js对象是否是Array
- 如何判断一个二叉树是否是平衡的?
- 如何判断一个数是否是2的幂次方
- 如何判断当前的上下文是否是一个列表
- 如何判断一个函数是否是凸的
- 如何判断一个数是否是2的n次方
- 如何判断一个数是否是2的N次方
- 一个简单但不明白的问题
- nokia播放声音
- 我的第一篇 Blog
- c#中的BeanUtils
- 转:left join/right join/inner join操作演示
- 如何判断一个对象是否是基本类型的Wrapper
- eV3, eV4 移植到VS2005过程中遇到的问题, 总结
- C盘资料转移工具
- 怎样使Windows启动时播放长时间的音乐
- 传奇源码分析-客户端(全局变量与总体执行流程)
- Asp.net日期字符串格式化显示
- 40种网站设计常用技巧
- 中图法分类号(计算机专业)和文献标识码
- 控制一个 Java 程序运行生命周期结束前不能再次被执行