猿问

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

我有一个类似的VO。


public class Job

{

    private Long id;

    private String createdBy;

    private Set<JobStatus> jobStatuses;

}

还有更多类似的领域。我想遍历 VO 中的字段并为所有没有数据的字符串字段设置“NA”。这就是我到目前为止所拥有的。


Job job = getJob();//getting the Job populated

BeanInfo 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。我该怎么做 ?


浮云间
浏览 231回答 3
3回答

哆啦的时光机

您不能将字符串值分配给非String类型的 Java 对象。但是我假设您可以将一个从默认构造函数构造的空对象(如果存在)分配给为空的属性。有了这个假设,请尝试以下解决方案:for (PropertyDescriptor propertyDesc : beanInfo.getPropertyDescriptors()) {&nbsp; &nbsp; if (propertyDesc.getReadMethod().invoke(job) == null&nbsp; &nbsp; &nbsp; &nbsp; && propertyDesc.getPropertyType() == String.class) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;propertyDesc.getWriteMethod().invoke(job, "NA");&nbsp; &nbsp; }&nbsp; &nbsp; else if (propertyDesc.getReadMethod().invoke(job) == null&nbsp; &nbsp; &nbsp; &nbsp; && propertyDesc.getPropertyType() != String.class) { //Other than String types&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;propertyDesc.getWriteMethod().invoke(job, propertyDesc.getPropertyType().newInstance());&nbsp; &nbsp; }&nbsp; &nbsp;}&nbsp;不要忘记使用 try-catch 块处理此代码。并非类中的所有对象都可能具有默认构造函数,在这种情况下,您可能需要进一步自定义代码。

偶然的你

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

心有法竹

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

相关分类

Java
我要回答