【发布时间】:2018-12-18 17:27:47
【问题描述】:
因此,这与其说是“我有一个错误如何解决”问题,不如说是“这真的是这样工作的吗?”问题。
所以,我正在查看我的代码以将实体持久保存到数据存储中,如果我尝试将属性设置为 null,那么所有的地狱都会失败。我注意到有一个setNull,但就是这样吗?为了调用适当的set,我必须在构建它之前手动检查每个属性?为过多数据类型而重载的标准集不应该自行处理 null 吗?
这是一段代码
public void put(BatchExecution obj) {
Key key = keyFactory.newKey(obj.getId());
FullEntity<Key> incBEEntity = Entity.newBuilder(key)
.set(BatchExecution.ID, obj.getId())
.set(BatchExecution.NAME, obj.getName())
.set(BatchExecution.CREATETIME, obj.getCreateTime())
.set(BatchExecution.ELAPSEDTIME, obj.getElapsedTime()) //I break the code because elapesedTime was never set in the object
.set(BatchExecution.STATUS, obj.getStatus().name())
.build();
datastore.put(incBEEntity);
}
我在这里遗漏了什么,或者这真的是 API 的工作原理吗?
【问题讨论】:
-
你可以像this answer一样使用
NullValue.of() -
@Mangu 这正是我不想做的,也不应该做的。手动检查属性是否为 null 并基于此调用不同的方法不是 API 的客户端问题,而是 API 问题。 SET 是重载的,所以我可以在不知道它的内部实现的情况下将它调用为任何支持的数据类型。如果我必须调用不同的方法来设置 NULL 值,这意味着内部 API 实现问题会暴露给 API 的客户端,这是错误的。此外,API 堆栈调用中已经有一个 Null 检查,这就是在 ... 中引发异常的原因
-
第一名,因此希望该检查位于堆栈的上层并且每个 SET 方法都进行检查并且如果值为 null 从 API 中调用 setNull 而不暴露,这真的太不真实了给用户?这真的很牵强吗?另外,我注意到您是 GCP 的支持者,如果您认为我应该在 github 上将其作为增强票打开,请告诉我
-
我只是推荐了我从阅读中看到的内容,如果您希望将此问题提交给 Java 开发团队,官方 Github 存储库is here。
标签: java google-cloud-platform google-cloud-datastore