在java中从一个对象映射到另一个对象(传输对象)时是否忽略空字段?

在java中从一个对象映射到另一个对象(传输对象)时是否忽略空字段?,java,if-statement,nullpointerexception,Java,If Statement,Nullpointerexception,我正在编写一个transfer对象,它将一个从webservice返回的对象映射到我自己的对象:cara到carb 汽车类具有里程属性 CarB.setMileage(CarA.getMileage()); //if the CarA.getMileage() is null, then my setter fails and I get a nullPointerException 我有50个字段,在设置字段之前,我只需要写50个单独的null检查,对吗 i、 e if (CarA.getM

我正在编写一个transfer对象,它将一个从webservice返回的对象映射到我自己的对象:cara到carb

汽车类具有里程属性

CarB.setMileage(CarA.getMileage()); //if the CarA.getMileage() is null, then my setter fails and I get a nullPointerException
我有50个字段,在设置字段之前,我只需要写50个单独的null检查,对吗

i、 e

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

如果
,有没有办法避免写50个独立的if=null
检查语句?

您可以在
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
}

您可以在
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
}

虽然不太常见,但更好的方法是在bean
类中使用一种常见的
方法

function String checkForNull(String str){

  //check for null and return corresponding
}
然后


CarB.setMiledge(checkForNull(CarA.getMiledge())

不太常见,但更好的方法是在bean
类中使用一种常见的
方法

function String checkForNull(String str){

  //check for null and return corresponding
}
然后


CarB.setMiledge(checkForNull(CarA.getMiledge())

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


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


向我们展示您的设置器代码。它必须大于
this.milies=newVal
您确定
CarA.getMiledge()
null
而不仅仅是
CarA
。向我们展示您的setter代码。它必须大于
this.milies=newVal
如果您不需要构造函数,您确定
CarA.getMileage()
null
,而不仅仅是
CarA
。或者类似地,
carB.setMileageFromCar(CarA)
。@chessbot是的,但这需要为您想要设置的每个属性设置一个这样的方法……足够公平;看起来他的代码想要设置属性,而不是构造一辆新车;可能类似于
carB.setFrom(carA)
。无论如何,这并没有太大区别。或者,类似地,
carB.setMileageFromCar(carA)
,如果您不需要构造函数。@chessbot是的,但这需要为每个要设置的属性使用一个这样的方法……足够公平;看起来他的代码想要设置属性,而不是构造一辆新车;可能类似于
carB.setFrom(carA)
。不管怎样,这没什么区别。谢谢你。我认为OP只是其中之一,也许还有更多的案例可以帮助我们的朋友。建议如此。关于删除的答案:请参阅。在目前的形式下,你的答案不适用于第8点到第12点,所以我发表了一条评论,并因为没有解决这个问题而对其投了否决票。谢谢fge。我认为OP只是其中之一,也许还有更多的案例可以帮助我们的朋友。建议如此。关于删除的答案:请参阅。在目前的形式下,你的答案不适用于第8点到第12点,所以我发表了一条评论,并对没有解决这个问题的答案投了否决票。