为了账号安全,请及时绑定邮箱和手机立即绑定

遍历对象并为空字段设置值

遍历对象并为空字段设置值

浮云间 2022-05-21 20:51:11
我有一个类似的VO。public class Job{    private Long id;    private String createdBy;    private Set<JobStatus> jobStatuses;}还有更多类似的领域。我想遍历 VO 中的字段并为所有没有数据的字符串字段设置“NA”。这就是我到目前为止所拥有的。Job job = getJob();//getting the Job populatedBeanInfo beanInfo = Introspector.getBeanInfo(Job.class);for (PropertyDescriptor propertyDesc : beanInfo.getPropertyDescriptors()) {    if (propertyDesc.getReadMethod().invoke(job) == null        && propertyDesc.getPropertyType() == String.class) {      propertyDesc.getWriteMethod().invoke(job, "NA");}}这很好用。但是现在我需要遍历其他本身就是对象的字段并动态地做同样的事情。喜欢Set<JobStatus> jobStatuses。我该怎么做 ?
查看完整描述

3 回答

?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

您不能将字符串值分配给非String类型的 Java 对象。但是我假设您可以将一个从默认构造函数构造的空对象(如果存在)分配给为空的属性。有了这个假设,请尝试以下解决方案:


for (PropertyDescriptor propertyDesc : beanInfo.getPropertyDescriptors()) {

    if (propertyDesc.getReadMethod().invoke(job) == null

        && propertyDesc.getPropertyType() == String.class) {

               propertyDesc.getWriteMethod().invoke(job, "NA");

    }

    else if (propertyDesc.getReadMethod().invoke(job) == null

        && propertyDesc.getPropertyType() != String.class) { //Other than String types                   

               propertyDesc.getWriteMethod().invoke(job, propertyDesc.getPropertyType().newInstance());

    }   

不要忘记使用 try-catch 块处理此代码。并非类中的所有对象都可能具有默认构造函数,在这种情况下,您可能需要进一步自定义代码。


查看完整回答
反对 回复 2022-05-21
?
偶然的你

TA贡献1841条经验 获得超3个赞

坦率地说,这只是不好的做法。如果要将对象保存在数据库中并希望将空属性保存为“NA”(无论出于何种原因),只需将列的默认值设置为“NA”。您还可以在构造函数中使用属性值 = 'NA' 来初始化对象,从而节省大量循环对象属性的时间。



查看完整回答
反对 回复 2022-05-21
?
心有法竹

TA贡献1866条经验 获得超5个赞

如果您不在构造函数中使用 N/A 初始化这些变量,您还可以在每个对象上使用一个方法,将空变量设置为 N/A 并调用它。



查看完整回答
反对 回复 2022-05-21
  • 3 回答
  • 0 关注
  • 230 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信