在java中从一个对象映射到另一个对象(传输对象)时是否忽略空字段?
我正在编写一个transfer对象,它将一个从webservice返回的对象映射到我自己的对象:cara到carb 汽车类具有里程属性在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
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点,所以我发表了一条评论,并对没有解决这个问题的答案投了否决票。