0

我正在编写一个传输对象,它只是将从网络服务返回的对象映射到我自己的对象:汽车 A 到汽车 B。

Car 类具有里程属性。

CarB.setMileage(CarA.getMileage()); //if the CarA.getMileage() is null, then my setter fails and I get a nullPointerException

我有 50 个字段,我是否正确,我只需要在设置字段之前为 null 编写 50 个单独的检查?

IE,

if (CarA.getMileage() != null) {
   CarB.setMileage(CarA.getMileage());
}

有没有办法避免编写 50 个单独的 if!=null检查语句?

4

3 回答 3

2

尝试使用推土机映射。这是一个很好的工具,它也可以帮助忽略空值。它可用于以编程方式和使用 XML 映射两个对象。如果对象的两个字段中的属性名称相同,则不要指定它们之间的任何映射。以下是链接:

http://dozer.sourceforge.net/documentation/faq.html

于 2013-06-03T18:07:00.530 回答
1

您可以在以下位置创建静态工厂方法CarB

// carA is of type CarA returned by the web service
CarB carB = CarB.fromCarA(carA);

然后将在该工厂方法中完成所有空值检查等。示例代码:

public class CarB
{
    //....

    public static CarB fromCarA(final CarA carA)
    {
        if (carA == null)
            throw new NullPointerException("Where is my car???");

        final CarB ret = new CarB();

        // Supposing CarA returns an Integer...
        final Integer mileage = carA.getMileage();
        if (mileage != null)
            ret.setMileage(mileage);

        // etc etc, then
        return ret;
    }

    // etc
}
于 2013-06-03T17:36:21.417 回答
1

不太常见,但更好的方法是method在你的 bean中很常见Class

function String checkForNull(String str){

  //check for null and return corresponding
}

接着

CarB.setMileage(checkForNull(CarA.getMileage()));

于 2013-06-03T17:40:55.510 回答