Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 遍历对象并为空字段设置值_Java - Fatal编程技术网

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

Java 遍历对象并为空字段设置值,java,Java,我有一个类似的VO public class Job { private Long id; private String createdBy; private Set<JobStatus> jobStatuses; } 这很有效。但是现在我需要遍历其他字段,这些字段本身就是对象,并且动态地执行相同的操作。如设置作业状态。我怎么做 坦率地说,这只是一种不好的做法。 如果要将对象保存在数据库中,并希望将空属性保存为“NA”(无论出于何种原因),只需将列的默认值设

我有一个类似的VO

public class Job
{
    private Long id;
    private String createdBy;
    private Set<JobStatus> jobStatuses;
}

这很有效。但是现在我需要遍历其他字段,这些字段本身就是对象,并且动态地执行相同的操作。如
设置作业状态
。我怎么做

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

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

您不能将字符串值分配给非
字符串类型的Java对象。但我假设您可以将从默认构造函数构造的空对象(如果存在)分配给null属性。根据该假设,尝试以下解决方案:

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块处理这段代码。并非类中的所有对象都有默认构造函数,在这种情况下,您可能需要进一步自定义代码。

您不想使用反射。。。但是你认为你当前的代码是如何工作的。。。?至于您的问题,是什么阻止您为其他对象类型定义默认值并以相同的方式进行设置?旁注-为什么要这样做而不是让它们空白/空白?像“NA”这样的东西最好是显示时间细节,而不是像这样实际存储在模型中。明白你的意思了。我无法设置默认值,因为VO实际上是一个hibernate实体,我不希望“NA”被持久化到DB中。将研究如何在UI中处理此问题。
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());
    }   
}