Raú*_*cía 1 java null annotations guava
使用参数注释@Nonnull并随后使用对其进行检查是否有意义Preconditions.checkNotNull()?
它们之间有什么区别?据我了解,@Nonnull除非您在IDE中进行了说明,否则using 将仅指定合同,而不会进行进一步检查。它是否正确?
规格和实现之间的区别。 @NonNull给出了例程的规范,并Preconditions.checkNotNull()给出了一种验证例程的方法。
@NonNull 在形式参数上指定一个合同:绝不能使用null作为相应的实际参数来调用该方法。
有多种方法可以验证这种规范。
您可以使用assert语句或等效地执行来执行运行时检查Preconditions.checkNotNull()。这将在运行时动态发现违反合同的情况,并使程序崩溃。通过发出较早的警告消息,可以使您的代码更易于调试,但是并不能提高代码质量。
您可以在编译时使用IDE或其他工具执行静态检查。如果您使用声音工具,则可以确保不会执行任何违反规范的操作并使程序崩溃。
您需要对方法进行规范以记录应如何使用。您最好使用@NonNull批注而不是像Javadoc 那样使用英语来编写,因为@NonNull它简洁易懂且易于阅读。因此,您应该编写@NonNull注释。
它是可选的,但很有用,可以验证规范的正确性。同时使用运行时检查和静态检查进行验证是一种束手无策的方法。它使用两种不同的技术来验证规范。如果您使用不可靠的静态检查工具(例如FindBugs),则进行运行时检查是个好主意,因为即使FindBugs不发出任何警告,您的代码中仍然可能存在空错误。如果您使用的是声音的工具,如NULL的含量检查中的检查框架,然后在运行时检查是多余的。但是,它们并没有带来太大的伤害:只是一点点的代码混乱和一点点的运行时开销。
(请注意,如果将null值作为参数传递,规范可能要求抛出特定异常。这将要求方法主体包含诸如以下代码的代码,Preconditions.checkNotNull()即使您已经证明程序永远不会传递null也不例外。指示确切抛出异常的规范对客户端代码不是特别有用,客户端只想知道在哪种情况下调用会成功,并且客户端不太可能有catch专门针对的代码块NullPointerException。客户在规范中需要的是null为非法值。)
| 归档时间: |
|
| 查看次数: |
1138 次 |
| 最近记录: |