前提条件 |番石榴 |Java
简介:前提条件类提供了一个静态方法列表,用于检查方法或构造函数是否使用有效的参数值调用。如果先决条件失败,则会引发定制的异常。
- 这些方法通常接受一个预期为真的布尔表达式。
- 在 checkNotNull 的情况下,这些方法接受预期为非空的对象引用。
- 相反,当传递 false/null 时,Preconditions 方法会引发未经检查的异常。
宣言 :
@GwtCompatible
public final class Preconditions
extends Object
示例 1:在此示例中,checkArgument 抛出IllegalArgumentException以指示 examplePre1 在调用 sqrt 时出错,因为传递的参数为负数。
// Returns the positive square
// root of the given value.
// throws IllegalArgumentException
// if the value is negative
public static double sqrt(double value)
{
Preconditions.checkArgument(value >= 0.0, "negative value: %s", value);
// calculate the square root
}
void examplePre1()
{
// Function calling
double ans = sqrt(-5.0);
}
示例 2:假设我们有一个将 List 作为参数的方法。调用此方法时,我们要检查列表是否不为空且不为空。该问题的简单Java解决方案如下所示:
// Method to check if passed list
// is null or empty
public void example(List
但是当我们使用 Guava 的 Preconditions 时,代码量明显减少。解决方案看起来像:
// Method to check if passed list
// is null or empty
public void example(List
示例 3:如果想要验证年龄以确保它大于 18,可以使用 Precondition.checkArgument()。
// To check if age is greater than 18 or not
public static void validateAge(int age)
{
// Guava Preconditions
checkArgument(age > 18);
}
下表显示了 Guava Preconditions 提供的一些方法。
每种方法都有三种变体,如下所列:
- 没有额外的参数:抛出任何异常而没有错误消息。
- 一个额外的对象参数:任何异常都会抛出错误消息 object.toString()。
- 一个额外的字符串参数:这个方法接受一个额外的字符串参数和任意数量的附加对象参数。它的行为类似于 printf,但为了 GWT 的兼容性和效率,它只允许 %s 指示符。
第三种变体的示例:
checkArgument(i >= 0, "Argument was %s but expected nonnegative", i);
checkArgument(i < j, "Expected i = %s", i, j);
Guava Preconditions 提供的其他一些方法是:
要点:以下是关于番石榴先决条件的一些要点。
- 当然可以使用这个类的方法来检查不是调用者错误的无效条件。不建议这样做,因为它会误导代码的未来读者。
- 使用com.google.common的项目通常应避免使用 Objects.requireNonNull(Object)。相反,使用适合情况的 checkNotNull(Object) 或 Verify.verifyNotNull(Object) 中的任何一个。
- 在 Preconditions 错误消息模板字符串中,仅支持“%s”说明符,不支持全部范围的 Formatter 说明符。
例子 :
// Java code to show implementation of
// Guava Preconditions
import com.google.common.base.Preconditions;
class GFG {
// Driver code
public static void main(String args[])
{
// Creating object of GFG Class
GFG obj = new GFG();
// try block
try {
System.out.println(obj.sum(5, null));
}
// catch block
catch (NullPointerException e) {
System.out.println(e.getMessage());
}
}
// Method to compute sum of 2 Integers
public int sum(Integer num1, Integer num2)
{
// Guava Preconditions
num1 = Preconditions.checkNotNull(num1,
"Illegal Argument, First parameter is Null.");
// Guava Preconditions
num2 = Preconditions.checkNotNull(num2,
"Illegal Argument, Second parameter is Null.");
return (num1 + num2);
}
}
输出 :
Illegal Argument, Second parameter is Null.
参考:谷歌番石榴