当前位置: 首页 > 面试题库 >

空检查错误消息为“为空”或“为空”

邴奇逸
2023-03-14
问题内容

在Java代码中执行空检查时,如果您为空值抛出IllegalArgumentExceptions,那么您将使用哪种消息模板?

我们倾向于使用这样的东西

public User getUser(String username){
   if (username == null){
     throw new IllegalArgumentException("username is null");   
   }
   // ...
}

哪个更好:“ is null”或“ was null”,为什么?

对我来说,“是空的”感觉更自然。


问题答案:

由于Exception由于失败的前提条件检查而引发,因此,我认为除了陈述事实以外,还应说明已违反的 要求

就是说,而不是"username is null""username should not be null"

关于使用库进行前提条件检查

提示,您可以使用许多旨在促进前提条件检查的库之一。番石榴中的许多代码使用com.google.common.base.Preconditions

在您自己的方法开始时将调用简单的静态方法以验证正确的参数和状态。这允许诸如

 if (count <= 0) {
   throw new IllegalArgumentException("must be positive: " + count);
 }

被更紧凑的替代

 checkArgument(count > 0, "must be positive: %s", count);

这里更直接相关的是它具有checkNotNull,它允许您简单地编写:

  checkNotNull(username, "username should not be null");

注意上面的代码读取的自然程度,详细消息明确指出了被违反的 要求

陈述事实的替代方法比较尴尬:

 // Awkward!
 checkArgument(count > 0, "is negative or zero: %s", count);
 checkNotNull(username, "username is null");

而且,这也可能不太有用,因为客户可能已经意识到了这一事实,并且异常并不能帮助他们弄清实际 需求 是什么。

IllegalArgumentExceptionVSNullPointerException

当你的原始代码抛出IllegalArgumentExceptionnull论点,番石榴的Preconditions.checkNotNull抛出NullPointerException来代替。

这符合API设置的准则:

NullPointerException:应用程序应抛出此类的实例以指示该null对象的其他非法使用。

另外,这是来自 有效Java 2nd Edition 的引用 :项目60:赞成使用标准异常

可以说,所有错误的方法调用都可以归结为非法论点或非法状态,但其他例外通常用于 _ 某些种类_
的非法论据和状态。如果调用者传入null了禁止使用空值的某些参数,则约定NullPointerException使用而不是IllegalArgumentException



 类似资料:
  • 问题内容: 我是Java新手。无法检查null。你能启发我吗?我有没有元素的字符串数组。 我尝试了这段代码 问题答案: 非常精确 会检查不是。并且将不为空[你也可以放弃该空格检查长度之前修剪。

  • 我想检查DateTime字段是否不是空的\null字符串。如果datetime字段不为空,则我将执行一些操作。 这是我的错误消息: 我能做些什么来检查一个字段是否不是字符串,而是对象?

  • 我正在从服务器下载文件。我用排球来做。 这是我的代码 以下是错误侦听器的错误消息在一些弱网络连接上,我收到以下逻辑消息 我不明白失败的原因是什么,因为大多数错误消息都返回null。我很确定这是因为请求超时,我知道如何增加超时,但是我应该在错误侦听器中编写什么代码,以便在出现错误时获得正确的错误消息。

  • 我有一个复杂的对象我想检查是否有效。我有一个方法来检查它,但是C#可为空性检查不知道它们: 有没有办法在这里应用类似TypeScript的类型门的东西?如果为true,那么我们知道不是null,但是C#分析器看不到函数内部。如果我内联检查它可以,但我是复制粘贴代码,这是一个简单的例子。 是否有任何注释或模式,我可以有空性分析与更复杂的检查?

  • 问题内容: 我试图弄清楚如何检查一个字段是否为空或为空。我有这个 我需要添加额外的支票,例如 任何想法如何做到这一点? 问题答案: 无论使用 要么 如果只想检查而不是空字符串,则也可以使用或。但这不适用于空字符串。