【发布时间】:2015-04-22 19:56:28
【问题描述】:
我正在使用一些代码,其中用户发送一个可以有超过 100 个值的对象。 (我们以汽车为例)。
updateDatabasePrep(carObject);
汽车对象可以包含名称、里程、VIN、颜色等...但是说我只设置颜色然后传递对象。
在我的方法中:
public void updateDatabasePrep(Car carObject){
NewObject myObject = newObject(); //Initialized, but empty
String x1 = carObject.getMilage();
String x2 = carObject.getColor();
String x3 = carObject.getName();
//These will hold null values no problem
//Once the rest of the data has been collected:
//These, however, will error out when I try to set the null values.
myObject.setMilage(x1);
myObject.setColor(x2);
myObject.setName(x3);
}
它使用访问器方法从传递的对象中提取数据,然后尝试设置所述值。在上述情况下,由于里程和名称为空,会抛出空指针错误;只有颜色不是。
我的目标是仅使用已设置的值更新数据库。在这种情况下,我可以为每个单独的语句编写大量的 if/else 或 try/catch 语句,这是可行的,但我不希望这样做。
在 Java 中有没有更短的方法来做到这一点?有没有一种方法可以让您只设置非空数据,而不是 if/else、try/catch 以及遍历每一个 setter 方法并告诉它跳过空值?
编辑: 澄清一下,当它尝试设置空值时,会抛出 Nullpointerexception。浏览器
myObject.setMilage(x1);
因为我们问的人。
【问题讨论】:
-
使用强类型语言,有时您应该弄脏自己的手。
-
updateDatabasePrep 方法的第一行不完整,“NewObject myObject...”。您能否更新示例代码以显示 myObject 是如何创建的?因为,除非您在 NewObject 类的 setter 方法中进行了一些特殊的错误检查,否则您不应该从设置 myObject 值的代码中得到任何错误。但是,如果您从未初始化 myObject,您将获得 NullPointerException。
-
你必须使用反射来解决这个问题。
-
好的,我得看看反射,我之前没用过
-
好的,我看到你更新了示例代码,在 myObject 之后添加了一个分号,但是,这永远不会真正编译,因为你试图在 myObject 上设置一些东西,而它从来没有被初始化。不知道这与您的实际代码有多接近,但在调用 myObject 上的设置器之前的某个时刻,您必须为其分配一个新的 NewObject 实例,例如“NewObject myObject = new NewObject();”。我想你已经知道了?
标签: java object if-statement try-catch getter-setter