一、前言:开发中,需要使用BeanUtils.copyProperties进行对象拷贝,但是值为null的需要过滤,忽略拷贝,BeanUtils.copyProperties的构造方法中有一个三个参数的
传入可变长度的字符串,改字符串就是忽略的字段名
二 、实现方式,基于反射,把源对象的值为null的参数名找出来,返回Array<String?> 数组格式
三、代码(kotlin版本)
object PublicUtils {
/**
* 获取所有字段为null的属性名
* 用于BeanUtils.copyProperties()拷贝属性时,忽略空值
* @param source
* @return
*/
fun getNullPropertyNames(source: Any): Array<String?> {
val emptyNames= HashSet<String>()
val fields: Array<Field> = source.javaClass.declaredFields
fields.forEach {
it.isAccessible=true
val value=it.get(source)
if(value?.toString().isNullOrBlank()) emptyNames.add(it.name)
}
val result = arrayOfNulls<String>(emptyNames.size)
return emptyNames.toArray(result)
}
}