From b72fd59b46897c8ce2bb730446347dacbf4d9fa8 Mon Sep 17 00:00:00 2001 From: ZhouXY108 Date: Fri, 11 Oct 2024 17:11:06 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=BF=E7=94=A8=20AssertTools=20=E4=BB=A3?= =?UTF-8?q?=E6=9B=BF=20PreconditionsExt=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plusone/commons/util/AssertTools.java | 71 +++++++++++++++++++ .../plusone/commons/util/EnumTools.java | 2 +- .../commons/util/PreconditionsExt.java | 55 -------------- .../commons/util/PreconditionsExtTests.java | 59 --------------- 4 files changed, 72 insertions(+), 115 deletions(-) create mode 100644 src/main/java/xyz/zhouxy/plusone/commons/util/AssertTools.java delete mode 100644 src/main/java/xyz/zhouxy/plusone/commons/util/PreconditionsExt.java delete mode 100644 src/test/java/xyz/zhouxy/plusone/commons/util/PreconditionsExtTests.java diff --git a/src/main/java/xyz/zhouxy/plusone/commons/util/AssertTools.java b/src/main/java/xyz/zhouxy/plusone/commons/util/AssertTools.java new file mode 100644 index 0000000..95512eb --- /dev/null +++ b/src/main/java/xyz/zhouxy/plusone/commons/util/AssertTools.java @@ -0,0 +1,71 @@ +/* + * Copyright 2022-2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package xyz.zhouxy.plusone.commons.util; + +import java.util.function.Supplier; + +import javax.annotation.Nonnull; + +/** + * 断言工具 + * + *

+ * 不封装过多判断逻辑,鼓励充分使用项目中的工具类进行逻辑判断。 + * 本工具类基本仅对表达式进行判断,并在表达式为 {@code false} 时抛出对应异常。 + */ +public class AssertTools { + + public static void checkParameterNotNull(String paramName, T value) { + checkCondition(value != null, + () -> new IllegalArgumentException(String.format("The parameter \"%s\" cannot be null.", paramName))); + } + + public static void checkParameterNotNull(T obj, String errMsg) { + checkCondition(obj != null, () -> new IllegalArgumentException(errMsg)); + } + + public static void checkParameterNotNull(T obj, String format, Object... args) { + checkCondition(obj != null, () -> new IllegalArgumentException(String.format(format, args))); + } + + public static void checkParameter(boolean condition, String errMsg) { + checkCondition(condition, () -> new IllegalArgumentException(errMsg)); + } + + public static void checkParameter(boolean condition, String format, Object... args) { + checkCondition(condition, () -> new IllegalArgumentException(String.format(format, args))); + } + + public static void checkState(boolean condition, String errMsg) { + checkCondition(condition, () -> new IllegalStateException(errMsg)); + } + + public static void checkState(boolean condition, String format, Object... args) { + checkCondition(condition, () -> new IllegalStateException(String.format(format, args))); + } + + public static void checkCondition(boolean condition, @Nonnull Supplier e) + throws T { + if (!condition) { + throw e.get(); + } + } + + private AssertTools() { + throw new IllegalStateException("Utility class"); + } +} diff --git a/src/main/java/xyz/zhouxy/plusone/commons/util/EnumTools.java b/src/main/java/xyz/zhouxy/plusone/commons/util/EnumTools.java index 882e75d..2ad504f 100644 --- a/src/main/java/xyz/zhouxy/plusone/commons/util/EnumTools.java +++ b/src/main/java/xyz/zhouxy/plusone/commons/util/EnumTools.java @@ -46,7 +46,7 @@ public final class EnumTools { public static > E valueOf(Class clazz, int ordinal) { // NOSONAR 该方法弃用,但不删掉 Preconditions.checkNotNull(clazz, "Clazz must not be null."); E[] values = clazz.getEnumConstants(); - PreconditionsExt.checkCondition((ordinal >= 0 && ordinal < values.length), + AssertTools.checkCondition((ordinal >= 0 && ordinal < values.length), () -> new EnumConstantNotPresentException(clazz, Integer.toString(ordinal))); return values[ordinal]; } diff --git a/src/main/java/xyz/zhouxy/plusone/commons/util/PreconditionsExt.java b/src/main/java/xyz/zhouxy/plusone/commons/util/PreconditionsExt.java deleted file mode 100644 index a0bdef3..0000000 --- a/src/main/java/xyz/zhouxy/plusone/commons/util/PreconditionsExt.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright 2022-2023 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package xyz.zhouxy.plusone.commons.util; - -import java.util.Arrays; -import java.util.function.Supplier; - -import javax.annotation.Nonnull; - -import com.google.common.base.Preconditions; - -/** - * Guava Preconditions 的扩展。 - * - * @author ZhouXY - * - * @see com.google.common.base.Preconditions - */ -public class PreconditionsExt { - - public static void checkCondition(boolean condition, @Nonnull Supplier e) throws E { - if (!condition) { - throw e.get(); - } - } - - public static void checkAllNotNull(Iterable values) throws E { - Preconditions.checkNotNull(values); - values.forEach(Preconditions::checkNotNull); - } - - @SafeVarargs - public static void checkAllNotNull(T... values) throws E { - Preconditions.checkNotNull(values); - Arrays.stream(values).forEach(Preconditions::checkNotNull); - } - - private PreconditionsExt() { - throw new IllegalStateException("Utility class"); - } -} diff --git a/src/test/java/xyz/zhouxy/plusone/commons/util/PreconditionsExtTests.java b/src/test/java/xyz/zhouxy/plusone/commons/util/PreconditionsExtTests.java deleted file mode 100644 index a6114d0..0000000 --- a/src/test/java/xyz/zhouxy/plusone/commons/util/PreconditionsExtTests.java +++ /dev/null @@ -1,59 +0,0 @@ -package xyz.zhouxy.plusone.commons.util; - -import org.junit.jupiter.api.Test; - -import lombok.extern.slf4j.Slf4j; - -import java.util.Arrays; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; - -@Slf4j -class PreconditionsExtTests { - - @Test - void testCheck() { - assertThrows(TestException.class, () -> { - PreconditionsExt.checkCondition(false, () -> new TestException("Test error message.")); - }); - } - - @Test - void testCheckAllNotNull() { - assertThrows(NullPointerException.class, () -> { - Object[] array = null; - PreconditionsExt.checkAllNotNull(array); - }); - Object obj = new Object(); - assertNotNull(obj); - assertThrows(NullPointerException.class, - () -> PreconditionsExt.checkAllNotNull(new Object[] { obj, null })); - assertThrows(NullPointerException.class, - () -> PreconditionsExt.checkAllNotNull(obj, null)); - List list = Arrays.asList(obj, null); - assertNotNull(list); - assertThrows(NullPointerException.class, - () -> PreconditionsExt.checkAllNotNull(list)); - - PreconditionsExt.checkAllNotNull(new Object[] { obj, "Test" }); - PreconditionsExt.checkAllNotNull(obj, "Test"); - PreconditionsExt.checkAllNotNull(Arrays.asList(obj, "Test")); - } -} - -class TestException extends Exception { - private static final long serialVersionUID = -8808661764734834820L; - - protected TestException(String msg) { - super(msg); - } - - protected TestException(Throwable cause) { - super(cause); - } - - protected TestException(String msg, Throwable cause) { - super(msg, cause); - } -}