- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 @Nonnull
注释的参数然后使用 Preconditions.checkNotNull()
检查是否有意义?
它们有什么区别?据我所知,使用 @Nonnull
只会指定一个契约(Contract),但不会进一步检查,除非您在 IDE 中这样告诉它。这是正确的吗?
最佳答案
区别在于规范和实现。 @NonNull
给出了例程的规范,Preconditions.checkNotNull()
给出了一种验证例程的方法。
@NonNull
指定形式参数上的契约:永远不应使用 null 作为相应的实际参数来调用该方法。
有多种方法可以验证此类规范。
您可以使用 assert
语句或等效的 Preconditions.checkNotNull()
执行运行时检查。这将在运行时动态地发现违反契约的行为,并使程序崩溃。这会通过提早发出警告消息使您的代码更易于调试,但不会提高代码质量。
您可以使用 IDE 或其他工具在编译时执行静态检查。如果您使用声音工具,则可以保证任何可能的执行都不会违反规范并导致程序崩溃。
您需要对您的方法进行规范,以记录它应该如何使用。您最好使用 @NonNull
注释来编写,而不是像 Javadoc 那样使用英语,因为 @NonNull
简洁且机器可读。因此,您应该编写 @NonNull
注释。
验证规范的正确性是可选的,但很有用。同时使用运行时检查和静态检查进行验证是一种安全措施。它使用两种不同的技术来验证规范。如果您使用诸如 FindBugs 之类的静态检查工具,那么进行运行时检查是一个好主意,因为即使 FindBugs 不发出任何警告,您的代码中仍然可能存在空值错误。如果您使用声音工具,例如 Nullness Checker的 Checker Framework ,那么运行时检查是无关紧要的。不过,它们并没有造成太大伤害:只是代码有点困惑和运行时开销有点大。
(请注意,如果将 null 值作为参数传递,规范可能会要求抛出特定异常。这将要求方法主体包含诸如 Preconditions.checkNotNull()
即使你已经证明你的程序永远不会传递 null。规定抛出的确切异常的规范对客户端代码并不是特别有用。客户端真的只想知道在什么情况下调用会成功,而客户端不太可能有专门针对 NullPointerException
的 catch
block 。因此,客户端在规范中需要的主要信息是 null 是非法值。)
关于java - 同时使用 @Nonnull 和 Preconditions.checkNotNull(...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40130931/
在 Java 中,我喜欢使用 Guava's Preconditions class 开始方法。确保方法参数不为空,或者是有效值。例如: public void myMethod(String str
这个问题在这里已经有了答案: Why should one use Objects.requireNonNull()? (12 个回答) 关闭 6 个月前。 我对 Guava 还是很陌生(老实说,我不
我发现 guava 中的 checkNotNull() 前提条件没有用 @Nonull 注释标记,这很不方便。考虑以下示例: State(Set models, Set variations) {
我对 Java 和 Android Studio 还很陌生,因为我主要在 Xamarin 下工作。 我正在实现一个语音识别项目(最初是在 Xamarin 中开发的,但现在由于 Google 某处引入的
使用 @Nonnull 注释的参数然后使用 Preconditions.checkNotNull() 检查是否有意义? 它们有什么区别?据我所知,使用 @Nonnull 只会指定一个契约(Contra
Guava Preconditions 的文档备注: Projects which use com.google.common should generally avoid the use of Ob
我是一名新的自动化测试人员,正在研究示例测试脚本,需要你们的帮助,我尝试使用 POM 和基本的 TestNG。 我创建了 2 个包 - 页面和测试用例。 当我尝试从我的页面包中访问“ClickJoin
我是 Selenium 的新手,我正在尝试创建一个小型框架,我在其中登录一个应用程序,然后尝试验证帐户中的一些文本。 但是一旦我的脚本登录帐户,浏览器就会关闭,我无法验证文本字符串。 有人说是因为dr
我最近将我的 Android Studio 更新到了 3.0。我尝试使用 Preconditions.checkNotNull() 但它显示错误并显示以下消息。 Preconditions.check
有什么办法可以抑制这个警告: MyClass object = null; /*Some code that 'might' set this object but I know it will*/
我是一名优秀的程序员,十分优秀!