import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.util.Iterator;
import java.util.Map;
import org.apache.commons.beanutils.BeanUtilsBean;
import org.apache.commons.beanutils.DynaBean;
import org.apache.commons.beanutils.DynaProperty;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class BeanUtil
{
private static Log log = LogFactory.getLog(BeanUtil.class);
public static void copyNotNullProperties(Object dest, Object orig)
throws IllegalAccessException, InvocationTargetException
{
BeanUtilsBean beanUtils = BeanUtilsBean.getInstance();
if (dest == null) {
throw new IllegalArgumentException("No destination bean specified");
}
if (orig == null) {
throw new IllegalArgumentException("No origin bean specified");
}
if (log.isDebugEnabled()) {
log.debug("BeanUtils.copyProperties(" + dest + ", " + orig + ")");
}
if ((orig instanceof DynaBean)) {
DynaProperty[] origDescriptors = ((DynaBean)orig).getDynaClass()
.getDynaProperties();
for (int i = 0; i < origDescriptors.length; i++) {
String name = origDescriptors[i].getName();
if ((!beanUtils.getPropertyUtils().isReadable(orig, name)) ||
(!beanUtils.getPropertyUtils().isWriteable(dest, name))) continue;
Object value = ((DynaBean)orig).get(name);
beanUtils.copyProperty(dest, name, value);
}
}
else if ((orig instanceof Map)) {
Iterator entries = ((Map)orig).entrySet().iterator();
while (entries.hasNext()) {
Map.Entry entry = (Map.Entry)entries.next();
String name = (String)entry.getKey();
if (beanUtils.getPropertyUtils().isWriteable(dest, name))
beanUtils.copyProperty(dest, name, entry.getValue());
}
}
else {
PropertyDescriptor[] origDescriptors = beanUtils.getPropertyUtils()
.getPropertyDescriptors(orig);
for (int i = 0; i < origDescriptors.length; i++) {
String name = origDescriptors[i].getName();
if ("class".equals(name)) {
continue;
}
if ((!beanUtils.getPropertyUtils().isReadable(orig, name)) ||
(!beanUtils.getPropertyUtils().isWriteable(dest, name))) continue;
try {
Object value = beanUtils.getPropertyUtils().getSimpleProperty(orig, name);
if (value != null)
beanUtils.copyProperty(dest, name, value);
}
catch (NoSuchMethodException localNoSuchMethodException)
{
}
}
}
}
}
分享到:
相关推荐
XStream是一个强大的库,专门用于XML与Java对象之间的互相转换。这篇博文将深入探讨如何利用XStream的转换器功能来优化这一过程。 XStream的核心原理是通过反射机制自动将Java对象映射到XML结构,并反之亦然。然而...
在Java语言中,`null`是一个非常重要的关键字,用于表示一个未确定的对象引用。这意味着你可以将`null`赋给任何引用类型变量,而不能将其赋给基本类型变量。例如: - 错误示例:`int a = null;` - 正确示例:`...
在 Java 编程语言中,判断空值是一个常见的操作,特别是在字符串处理中。Java 提供了多种方法来判断字符串是否为空,但这些方法的实现原理和效率却存在很大的差异。本文将深入探讨 Java 判断空值方法的原理,分析每...
要将一个Java对象转换为JSON字符串,我们可以使用`ObjectMapper`的`writeValueAsString()`方法。假设我们有一个简单的User类: ```java public class User { private String name; private int age; // getters...
接着,我们可以创建一个`DatasetRaster`对象来表示栅格数据集,通过`DataFactory.open()`方法打开一个栅格数据文件。这个数据集通常包含了一个或多个`Grid`对象,每个`Grid`代表了数据的一个层。 要将指定值设为...
这是一个帮助程序库,用于在类级别验证Java类成员的空值和空值。 它旨在减少样板代码,即,它通过使用多个条件语句来缩短检查类的单个成员的值的时间范围。 我们甚至可以在层次结构级别上检查对象,即成员对象的成员...
在Java编程中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,因其简洁、易读、易于解析的特点,被广泛应用于Web服务和应用程序之间的数据传输。在处理JSON数据时,我们通常需要将Java对象转换为...
Gson是Google提供的一个库,也可以轻松地在Java对象和JSON字符串之间进行转换。如果你的压缩包中有Gson的相关jar包,那么可能是: - `gson.jar`:包含了整个Gson库,用于对象到JSON的转换。 3. **使用示例**: ...
处理完数据后,使用`csv.writer`对象将处理结果写入到指定的CSV文件中。这里需要注意的是,`writer`对象被配置为写入UTF-8编码的文件,这对于处理中文数据尤为重要,因为这样可以避免编码错误导致的乱码问题。 最后...
找出文档中的空值,并用前值填充空值,分为大跳(中间有连续空值),和小跳,中间只有一个空值
1. **Jackson库**:Jackson是Java中最流行的JSON处理库之一,提供了解析JSON到Java对象以及将Java对象序列化为JSON的功能。使用`ObjectMapper`类,可以轻松完成转换。例如: ```java ObjectMapper mapper = new ...
SQL Server 中的空值问题是一个非常重要且复杂的主题。 空值的存在可以导致数据处理和查询结果的不确定性。因此,了解空值的语义、关系模型和三值逻辑在 SQL Server 中的应用非常重要。 空值的语义 空值可以分为三...
本项目中,我们探讨的是一个自定义的日期控件,它具有扩展功能,支持空值,同时结合了下拉式树形控件的设计。这种控件的实现能够提供更灵活的用户交互体验,特别是在需要用户选择日期但又允许不输入的情况下。 首先...
为了解决这些问题,我们可以使用 ISNULL 函数将空值替换成一个默认值,从而避免空值对统计结果和外键约束的影响。同时,我们也可以使用其他函数,例如 COALESCE 函数和 CASE 函数,来处理空值。
HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。 HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。 Hashtable继承自Dictionary类...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于JavaScript的一个子集,易于人阅读和编写,同时也易于机器解析和生成。在IT领域,JSON被广泛应用于Web服务和应用程序之间的数据传输,因为它...
空值的判断,空值的过滤,补全空值.ipynb
总的来说,"Java面向对象学生信息管理系统"是一个涵盖了Java语言特性、面向对象设计原则、数据库操作、用户界面构建等多个方面的综合性项目。开发者需要具备扎实的Java基础,良好的编程习惯,以及对软件工程的理解,...
如果在没有配置好Java环境的情况下使用本支持库,所有对象方法都将返回空值(假,0,“”)。本支持库安装后,将自动在易语言主菜单中添加一项工具菜单,[工具]-[JavaLib:Java类型签名查询]。这是一个查询“Java ...
`这个匿名函数,将所有空值替换为`replacementValue`。此外,还可以选择使用统计方法,如均值、中位数或众数填充空值,以保持数据的分布特性。 对于字符型数据,处理方式略有不同。MATLAB中的字符串数组可以包含空...