当“给定 id 的用户不存在”时,我应该抛出 IllegalArgmentException 吗?

2024-02-16

假设我们有一个方法changeUserName(Long id,String newName)它调用存储库的findUser(Long id)找到正确的用户实体,然后更改其名称。
扔一个合适吗IllegalArgmentException when findUser返回空值?
或者我应该抛出一个自定义UserNotExistException(扩展 AppException 扩展 RuntimeException)?


UPDATE:

  • RuntimeException:
    @nachokk @JunedAhsan 实际上我故意做出所有例外unchecked,因为我觉得这样可以让客户端代码干净,方便调试,更节省。至于那些“未处理”的,我将把它们全部捕获在层的顶部,从而避免在用户界面上显示它们。
    这是因为许多客户发现checked exceptions然后就忽略它,在某些情况下他们不知道如何处理它。这是一个隐患。

  • 澄清:
    对不起,我的英语不好。我的意思是如果更改用户名应该抛出一个IllegalArgumentException,不是findUser方法。还有一个问题:如何区分illegal argument from business rule violation?


你应该使用UserNotExistException。这个名字非常明确地说明了正在发生的事情。我认为你应该避免退货null但如果你这样做了,你必须记录下来。

UPDATE

我在想,正如@JunedAhsan 所建议的那样,UserNotExistException可能会更好CheckedException(从 Exception 扩展,而不是 RuntimeException)。

从这个链接:未经检查的异常:争议 http://docs.oracle.com/javase/tutorial/essential/exceptions/runtime.html

如果可以合理地预期客户端会从异常中恢复, 使其成为受检查的异常。如果客户无法采取任何措施来恢复 从异常中,使其成为未经检查的异常。

/**
* @return User found or throw UserNotExistException if is not found
*/
public User findUser(Long id) throws UserNotExistException{
    //some code
    User user = giveMeUserForSomePlace();
    if(user == null){
        throw new UserNotExistException();
    }  
    return user;   
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当“给定 id 的用户不存在”时,我应该抛出 IllegalArgmentException 吗? 的相关文章

随机推荐

  • 使用不带 InvokePattern 或 clickablePoint 的 UI Automation在单击按钮时调用

    我尝试将点击消息发送到 或调用 另一个应用程序中的按钮 我使用 UISpy exe 并可以找到我需要的元素 但它没有 id 没有 clickablePoint 也没有 Invoke 模式 我尝试了以下代码 var processStartI
  • 一种为对象数据库建立索引的方法

    我正在使用对象数据库 ZODB 来存储许多对象之间的复杂关系 但遇到了性能问题 因此 我开始构建索引以加快对象检索和插入速度 这是我的故事 希望对您有所帮助 最初 当我向数据库添加对象时 我会将其插入专用于该对象类型的分支中 为了防止多个对
  • 没有 JDK 的 JRE 6 (Windows) 上的堆转储

    有没有办法在没有安装 JDK 的远程计算机上创建堆转储 我无法更改安装 设置 并且它在 Windows 上运行 所以我可以随时访问命令行工具 问题是远程计算机上的 Java 应用程序冻结 没有内存不足异常 因此 XX HeapDumpOnO
  • JAXB 解组忽略命名空间将元素属性变成 null

    我正在尝试使用 JAXB 将 xml 文件解组为对象 但遇到了一些困难 实际项目的 xml 文件中有几千行 因此我以较小的规模重现了错误 如下所示 XML 文件
  • 防止“xmlValue”剥离
    标签

    我遇到了一个问题 其中xmlValue剥离 br 我需要保留的标签 或转换为其他角色 然后我可以strsplit on 这是一个例子 gt f lt htmlParse getForm http sites target com site
  • WaitForMultipleObjects 会修改*多个*对象的状态吗? [复制]

    这个问题在这里已经有答案了 使用时WaitForMultipleObjects bWaitAll FALSE http msdn microsoft com en us library windows desktop ms687025 28
  • 为什么 1ul << 64 返回 1 而不是 0? [复制]

    这个问题在这里已经有答案了 考虑下面的代码 Simply loop over until 64 is hit unsigned long x 0 for int i 0 i lt 64 i if i 64 x 1ul lt lt i pri
  • 给定一个整数数组,使用数组中的数字找到最大的数字,使其能被 3 整除

    例如 数组 4 3 0 1 5 假设所有数字都 gt 0 数组中的每个元素也对应一个数字 即数组中的每个元素都在 0 到 9 之间 在上面的数组中 最大的数字是 5430 使用数组中的数字 5 4 3 和 0 我的方法 为了能被 3 整除
  • 通过沿最后一个轴对每个第 n 个元素进行采样来构造数组

    Let a是一些 不一定是一维 NumPy 数组n m沿其最后一个轴的元素 我希望沿着它的最后一个轴 分割 这个数组 以便我将每个n 第一个元素从0直到 为止n 明确地让a有形状 k n m 然后我想构造形状数组 n k m np arra
  • 如何在发送前更改响应

    是否可以拦截向客户端发送的响应 并在最终发送修改后的响应 我想从基本身份验证响应中删除 WWW Authenticate 标头 或者在错误的身份验证情况下将错误代码从 401 更改为 403 附 我也有同样的问题 http www java
  • 将更改分发到多个分支的 Git 工作流程

    我有一个 Git 存储库 其中有两个严重分歧的分支 A 和 B A是开源软件的上游分支 B 是我们对其所做的所有更改 从 A 的早期提交作为起点 我们想要的是 如上A B 拥有我们希望上游开发人员可以使用的所有更改 C 包含仅适用于我们对软
  • SurfaceView 上的 Android 相机纵向显示

    我尝试了几种方法来尝试让相机预览以纵向方式显示在SurfaceView 什么都没起作用 我正在使用 2 0 1 的 Droid 进行测试 我试过 1 通过以下方式强制布局为纵向 this setRequestedOrientation Ac
  • 使用 OkHttp 分析 http 请求

    如何使用 OkHttp 跟踪详细的请求时间 我想得到 连接时间 发送时间 接收时间 我尝试使用拦截器机制 但它只提供总请求时间 class LoggingInterceptor implements Interceptor Override
  • localhost 和 127.0.0.1 不一样吗?

    我有一个在两个进程之间传递数据的套接字应用程序 它在多台计算机上运行良好 并且两个进程在同一台计算机上运行 我办公室的一个人访问了一个政府办公室 他们对她的笔记本电脑进行了一些未知的更改 以便她可以访问他们的网络 当她离开后 该应用程序不再
  • 是否可以替换 Android 中默认的“强制关闭”对话框?

    我希望我的 Android 应用程序的用户可以选择通过电子邮件向我发送导致我的应用程序崩溃的任何未捕获异常的堆栈跟踪 最初 我以为我只需将应用程序的每个入口点包装在 try catch 块中 但即使在我的小应用程序中 也有太多这样的入口点
  • 由于 VACUUM 查询,Amazon Redshift 磁盘使用率为 100%

    阅读 Amazon Redshift 文档后 我在某个 400GB 表上运行了 VACUUM 该表以前从未被清理过 以尝试提高查询性能 不幸的是 VACUUM 导致表增长到 1 7TB 并使 Redshift 的磁盘使用率达到 100 然后
  • Rails:不同控制器的形式

    我正在开发一个带有登陆页面的 Rails 应用程序 在登陆页面上 用户可以注册该应用程序 对于登录 有一个带有额外控制器的额外视图 它看起来像这样 views landinpage index html gt sign up form vi
  • 在 TensorFlow CTC(语言模型)中使用自定义 Beam 评分器

    是否可以从 Python 端在 TensorFlow CTC 实现中自定义 Beam Scorer 我在 CTCBeamSearchDecoder C 类构造函数的评论中看到了这种可能性 但想知道如何为 Python 用户提供此功能 我们遇
  • 在 CPLEX Concert 技术中获得对偶公式

    我已经看到答案了这个类似的问题 https stackoverflow com questions 45561059 dual of models by cplex但它没有回答我的问题 有没有什么方法可以直接在算法中获取对偶公式的目标函数和
  • 当“给定 id 的用户不存在”时,我应该抛出 IllegalArgmentException 吗?

    假设我们有一个方法changeUserName Long id String newName 它调用存储库的findUser Long id 找到正确的用户实体 然后更改其名称 扔一个合适吗IllegalArgmentException w