浏览代码

!154 断言增加支持自定义异常

Merge pull request !154 from webhua_323/v5-dev
Looly 5 年之前
父节点
当前提交
686142442a

+ 20 - 0
hutool-core/src/main/java/cn/hutool/core/lang/Assert.java

@@ -2,8 +2,11 @@ package cn.hutool.core.lang;
 
 import java.util.Collection;
 import java.util.Map;
+import java.util.function.Supplier;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.lang.func.Func0;
+import cn.hutool.core.lang.func.VoidFunc0;
 import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.util.StrUtil;
 
@@ -17,6 +20,23 @@ import cn.hutool.core.util.StrUtil;
 public class Assert {
 
 	/**
+	 * 断言是否为真,如果为 {@code false} 抛出给定的异常<br>
+	 *
+	 * <pre class="code">
+	 * Assert.isTrue(i &gt; 0, IllegalArgumentException::new);
+	 * </pre>
+	 *
+	 * @param expression 布尔值
+	 * @param supplier   指定断言不通过时抛出的异常
+	 * @throws X if expression is {@code false}
+	 */
+	public static <X extends Throwable> void isTrue(boolean expression, Func0<? extends X> supplier) throws X {
+		if (false == expression) {
+			throw supplier.callWithRuntimeException();
+		}
+	}
+
+	/**
 	 * 断言是否为真,如果为 {@code false} 抛出 {@code IllegalArgumentException} 异常<br>
 	 * 
 	 * <pre class="code">

+ 12 - 0
hutool-core/src/test/java/cn/hutool/core/lang/AssertTest.java

@@ -14,4 +14,16 @@ public class AssertTest {
 		String a = null;
 		cn.hutool.core.lang.Assert.isNull(a);
 	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void isTrueTest() {
+		int i = 0;
+		cn.hutool.core.lang.Assert.isTrue(i > 0, IllegalArgumentException::new);
+	}
+
+	@Test(expected = IndexOutOfBoundsException.class)
+	public void isTrueTest2() {
+		int i = -1;
+		cn.hutool.core.lang.Assert.isTrue(i >= 0, IndexOutOfBoundsException::new);
+	}
 }