gpt4 book ai didi

java - 我怎样才能摆脱 java 中过多的空检查?

转载 作者:搜寻专家 更新时间:2023-11-01 03:40:46 24 4
gpt4 key购买 nike

假设我有这样的代码:

Vehicle vehicle = vehicleRepostory.findByIdInitialized(vehicleId);

如果找不到 Vehicle,此方法将返回 null。规范说在这种情况下我必须抛出一个 MyObjectNotFoundException 所以代码变成这样:

Vehicle vehicle = vehicleRepostory.findByIdInitialized(vehicleId);
MyObjectNotFoundException.throwIfNull(vehicle, Vehicle.class, vehicleId);

如果我想摆脱对 throwIfNull 的调用,我该怎么做。无论如何,它并不是真正的 DRY 和糟糕的设计选择。一定有一些我不知道的设计模式。我在网上搜索,但没有找到任何真正有用的东西。

一个简单的解决方案可能是将代码放入我的存储库,但我为此使用了 SpringData,因此它只是一个接口(interface):

public interface VehicleRepository extends Repository<Vehicle, Long>

// ...

@Query("select v from Vehicle v LEFT JOIN FETCH v.technicalData td LEFT JOIN FETCH v.registrationData rd"
+ " where v.vehicleId = ?")
Vehicle findByIdInitialized(Long vehicleId);

最佳答案

听起来基本上您希望您的存储库支持这个:

Vehicle vehicle = vehicleRepository.loadExisting(vehicleId);

loadExistingfindByIdInitialized 之间的区别在于,前者期望实体存在,如果存在则抛出异常不是。

这样一来,所有存储库客户端都可以决定在执行查找时是否希望缺少实体导致异常。您甚至可能会发现,所有 按 ID 的查找都应该抛出异常 - 在这种情况下,您可以返回使用单一方法。

编辑:如果存储库是自动生成的,我会采用以下三种方法之一:

  • 包起来
  • 扩展它
  • 修改生成器

这些选择中的哪一个最合适取决于具体细节。

关于java - 我怎样才能摆脱 java 中过多的空检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15021024/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com