优化java代码以及如何使其看起来很好

时间:2016-03-31 08:41:19

标签: java optimization

我有一段代码,它总是被使用,但它看起来非常冗余,我可以做些什么来回避冗余。

        if(CommonUtil.isNull(second.getProvince())) {
            second.setProvince(first.getProvince());
        }

        if(CommonUtil.isNull(second.getCity())) {
            second.setCity(first.getCity());
        }

        if(CommonUtil.isNull(second.getDistrict())) {
            second.setDistrict(first.getDistrict());
        }

        if(CommonUtil.isNull(second.getAddress())) {
            second.setAddress(first.getAddress());
        }

        ........

2 个答案:

答案 0 :(得分:0)

由于你的对象看起来像远方的bean,你可能会看看java.beans.Introspector和BeanInfo。

粗略地说:

BeanInfo bi = Introspector.getBeanInfo(MyObjectClass.class);
for(PropertyDescriptor p : bi.getPropertyDescriptors()) {
    // perform null-check
    // invoke read on source object via read method delivered by p.getReadMethod()
    // write to target via method delivered by p.getWriteMethod()
}

答案 1 :(得分:0)

您可以在数据类中编写此方法,并使用一行代码对所有字段进行空值控制。我的代码建议如下:

public boolean copyIfNull(Object o)
{

        Class<?> clazz = this.getClass();
        Field[] fields = clazz.getDeclaredFields();

        for(Field field : fields)
        {
        try {
            Object fieldValue = field.get(this);
            if (fieldValue == null)
            {
                field.set(this, field.get(o));
                return false;
            }
        }

        catch (Exception e) {
            System.err.println("Field value could not be obtained");
            e.printStackTrace();
            return false;
        }
        }


    return true;

}

你会像这样称呼这个方法:

second.copyIfNull(first)