java搬到类的属性不为空_Java复制对象的非空属性到另外一个对象,包含内部类的属性,不复制空...

网上能找到的复制对象几乎都不包含内部类的属性复制,要么不复制内部类,要么直接把内部类的对象复制过去,但是需求如果是要复制内部类中的非空属性那就不行了,所以自己写了套,兼容了非空字段以及内部类

/**

* 覆盖from对象上的所有属性到to对象上,兼容内部类,如果属性为null则不覆盖

*

* @param from 要复制的对象

* @param to 目标对象

*/

public Object copyPropertiesExclude(Object from, Object to) {

Class fromClass = from.getClass();

Class[] innerClazz = fromClass.getDeclaredClasses();

Field[] fields = fromClass.getFields();

try {

for (Field field : fields) {

Object fromObj = field.get(from);

if (fromObj == null) continue;

Object toObj = field.get(to);

String fieldStr = field.toString();

String[] fieldArray = fieldStr.split("\\.");

String fieldString = fieldArray[fieldArray.length - 1];

//field是基本类型的直接赋值

if (isBaseType(field.getGenericType().toString())) {

field.set(to, fromObj);

} else {

//field跟innerclass的顺序不一致,不能按照下标对比,只能判断最后一位的类名相同

for (Class fromInner : innerClazz) {

String[] innerClassArray = fromInner.toString().split("\\$");

String classStr = innerClassArray[innerClassArray.length - 1];

if (fieldString.toLowerCase().equals(classStr.toLowerCase())) {

//内部类的field列表

Field[] fromFields = fromInner.getFields();

for (Field fromField : fromFields) {

//基本类型或者string类型直接赋值,否则循环遍历类中的属性,只对基本类型赋值

if (!isBaseType(fromField.getGenericType().toString())) {

if (fromField.get(fromObj) != null) {

copyPropertiesExclude(fromField.get(fromObj), fromField.get(toObj));

}

} else {

Object value = fromField.get(fromObj);

if (value != null) {

fromField.set(toObj, value);

}

}

}

}

}

}

}

} catch (Exception e) {

e.printStackTrace();

}

return to;

}

/**

* 判断属性是否为基本类型

* 包括8种基本类型,和string,list,map类型的也直接覆盖

* @return

*/

private boolean isBaseType(String type) {

if (type.equals("class java.lang.Integer") ||

type.equals("class java.lang.Byte") ||

type.equals("class java.lang.Long") ||

type.equals("class java.lang.Double") ||

type.equals("class java.lang.Float") ||

type.equals("class java.lang.Character") ||

type.equals("class java.lang.String") ||

type.equals("class java.lang.Short") ||

type.equals("class java.lang.Boolean") ||

type.startsWith("java.util.List") ||

type.startsWith("java.util.HashMap")) {

return true;

}

return false;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 2020-2021死亡公司(截止到21.02.19)是一份包含了在2020年至2021年期间宣告破产或停业的公司名单的电子表格文件。该文件记录了截止于2021年2月19日之前的相关信息。 在这份文件,我们可以找到那些不幸倒闭或宣告破产的公司的详细信息,如公司名称、行业领域、注册地和破产日期。这些信息可以帮助我们了解当前商业环境的挑战,并从这些公司的倒闭或破产案例汲取教训以更好地经营我们自己的公司。 倒闭或破产的原因可能是多种多样的,包括经济不景气、经营不善、市场竞争激烈、成本过高、财务问题等。这份文件可以作为一个警示,提醒我们在经营要谨慎、审慎,及时调整经营策略,以避免似的经营风险。 阅读这份文件,我们可以看到企业生存和发展并不容易,需要实施正确的战略、合理的财务管理以及稳定的市场运营等方面的保护措施。同时,还可以为我们提供关于当前商业环境下怎样避免倒闭或破产的一些建议和教训。 总之,2020-2021死亡公司(截止到21.02.19)这份文件对于我们了解当前商业环境的风险、避免常见的经营错误以及提高经营管理能力是非常有价值的。通过理解和分析这些公司的倒闭案例,我们可以加强自身的经营优势,提高公司的竞争力,并确保公司的可持续发展。 ### 回答2: 2020-2021年度出现的"死亡公司(截至21.02.19).xlsx"是一份文件,其记录了在这一年度内关闭、破产或倒闭的公司名单。这份文件可以包含关于这些公司的详细信息,例如公司名称、所属行业、关闭日期等。根据这份文件,我们可以看到一些在过去一年面临困境并最终不复存在的公司。 死亡公司名单的产生通常是由于一系列问题和困境,例如财务困难、经营不善、市场竞争激烈、管理不善等等。这些问题可能导致公司无法持续经营,最终选择关闭。对于这些死亡公司来说,这是一个巨大的打击,不仅对于公司自身,也对于其员工和合作伙伴产生了重大影响。 对于整个经济体系来说,存在死亡公司也是正常的现象。这些公司的关闭为其他更具竞争力和创新性的公司腾出了间,促进了市场的优胜劣汰,有助于推动经济的发展和进步。 从这份文件,我们也可以得出一些有关企业经营的启示。首先,合理的财务管理和经营战略对公司的生存至关重要。其次,了解并适应市场的需求和趋势也是企业长期发展的关键。此外,高效的管理和有效的资源利用也是保持企业竞争力的重要因素。 总的来说,2020-2021年度的死亡公司名单是反应了经济环境下公司面临的挑战和压力。通过分析这些信息,我们可以从汲取教训,寻找改进和发展的机会,以便在竞争激烈的市场脱颖而出,并保持长期的可持续经营。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值