在Java中检查NOTNULL的其他方法
我的项目中有很多这样的代码:在Java中检查NOTNULL的其他方法,java,Java,我的项目中有很多这样的代码: if (entityRepository.saveEntity(new RemoteEntityBuilder() .appId(appId) .nameSpace(nameSpace) .entityType(entityType) .entityId(entityId) .blobs(Lists.list(new RemoteBlobBuilder() .blobName(blobName) .blobStr
if (entityRepository.saveEntity(new RemoteEntityBuilder()
.appId(appId)
.nameSpace(nameSpace)
.entityType(entityType)
.entityId(entityId)
.blobs(Lists.list(new RemoteBlobBuilder()
.blobName(blobName)
.blobStream(new SimpleRemoteInputStream(inputStream))
.build()))
.build()) != null) {
// Meaning entity was saved
} else {
// Meaning entity was not saved
}
saveEntity
方法返回NULL(如果操作失败)或操作成功时保存的对象/实体。我的问题是,有没有更好的方法用!=空
例如:
if(entityRepository.saveEntity(...)) {
}
或者别的什么
更新:
saveEntity
方法如下
@Override public RemoteEntity saveEntity(RemoteEntity entity)
throws NotBoundException, RemoteException {
RemoteEntities remoteEntities = saveEntities(new RemoteEntity[] {entity});
return remoteEntities != null ? remoteEntities.entities().stream().findFirst().get() : null;
}
多亏了YCF\u L,现在的情况如下:
entityRepository.saveEntity(new RemoteEntityBuilder()
.appId(appId)
.nameSpace(nameSpace)
.entityType(entityType)
.entityId(entityId)
.blobs(Lists.list(new RemoteBlobBuilder()
.blobName(blobName)
.blobStream(new SimpleRemoteInputStream(inputStream))
.build()))
.build()).ifPresentOrElse(remoteEntity -> {
pubSubService.updated(remoteEntity.appId(), remoteEntity.nameSpace(),
remoteEntity.entityType(), remoteEntity.entityId());
setStatus(Status.SUCCESS_CREATED);
}, () -> {
setStatus(Status.CLIENT_ERROR_BAD_REQUEST);
});
以下是代码在IDE中的外观(在我看来非常干净):
什么是“更好”可能是一个意见问题
根据您的示例,实现这一点的方法是创建另一个调用saveEntity()
并返回true
或false
的方法。(我确实想知道为什么saveEntity()
在其操作失败时不抛出异常——这在我的经验中更为正常。)
如果您只是不喜欢比较难以发现,您可能会颠倒顺序:
if (null != entityRepository.saveEntity(...))
我可能会将调用完全移到if之外,因为我发现条件句中的副作用可能会令人困惑
RemoteEntity myEntity = entityRepository.saveEntity(...)
if (myEntity != null) ...
什么是“更好”可能是一个意见问题
根据您的示例,实现这一点的方法是创建另一个调用saveEntity()
并返回true
或false
的方法。(我确实想知道为什么saveEntity()
在其操作失败时不抛出异常——这在我的经验中更为正常。)
如果您只是不喜欢比较难以发现,您可能会颠倒顺序:
if (null != entityRepository.saveEntity(...))
我可能会将调用完全移到if之外,因为我发现条件句中的副作用可能会令人困惑
RemoteEntity myEntity = entityRepository.saveEntity(...)
if (myEntity != null) ...
在您的情况下,我将使用
可选:
public Optional<RemoteEntity> saveEntity(RemoteEntity entity) throws NotBoundException, RemoteException {
RemoteEntities remoteEntities = saveEntities(new RemoteEntity[]{entity});
return remoteEntities.entities().stream()
.findFirst();
}
事实上,您有许多可选的选项
,您还可以使用ifPresent
:
entityRepository.saveEntity(...)
.ifPresent(r -> ..)
或引发异常:
entityRepository.saveEntity(...)
.orElseThrow(() -> ..)
在您的情况下,我将使用可选:
public Optional<RemoteEntity> saveEntity(RemoteEntity entity) throws NotBoundException, RemoteException {
RemoteEntities remoteEntities = saveEntities(new RemoteEntity[]{entity});
return remoteEntities.entities().stream()
.findFirst();
}
事实上,您有许多可选的选项
,您还可以使用ifPresent
:
entityRepository.saveEntity(...)
.ifPresent(r -> ..)
或引发异常:
entityRepository.saveEntity(...)
.orElseThrow(() -> ..)
您所说的使用!=例如,null:?我的意思是我可以构建一个新方法,比如saveEntityBoolean
,来包装它,但这有点过分,API看起来很糟糕。类似于,if(saved){//do stuff}
正确使用异常可能是一种方法。。并且避免使用null。。这个方法“saveEntities”如果不能成功保存实体,可能会引发一些异常。另外,我更喜欢避免在方法上返回null,基本上是为了使客户端代码更干净,检查这个有趣的post@quarks我认为你构建对象的方式很难看,我会创建一个单独的变量,这可以使您的代码更加清晰明了您的意思是,有没有更好的方法使用!=例如,null:?我的意思是我可以构建一个新方法,比如saveEntityBoolean
,来包装它,但这有点过分,API看起来很糟糕。类似于,if(saved){//do stuff}
正确使用异常可能是一种方法。。并且避免使用null。。这个方法“saveEntities”如果不能成功保存实体,可能会引发一些异常。另外,我更喜欢避免在方法上返回null,基本上是为了使客户端代码更干净,检查这个有趣的post@quarks我认为你构建对象的方式很难看,我会创建一个单独的变量,这可以使您的代码更加清晰明了是的,这实际上是有意义的stream()。您不需要.orElse(可选的.empty())
是的,这实际上是有意义的stream().findFirst()
实际上返回一个可选的。您不需要.orElse(可选的.empty())