From 522dbd3a32750146beb78f12f9cd7a39f7e76795 Mon Sep 17 00:00:00 2001
From: ZhouXY108
Date: Wed, 28 Jun 2023 01:05:56 +0800
Subject: [PATCH 1/6] fix bug.
---
.../plusone/commons/util/DateTimeUtil.java | 27 ++++++-------------
1 file changed, 8 insertions(+), 19 deletions(-)
diff --git a/src/main/java/xyz/zhouxy/plusone/commons/util/DateTimeUtil.java b/src/main/java/xyz/zhouxy/plusone/commons/util/DateTimeUtil.java
index ffebe8a..bb78567 100644
--- a/src/main/java/xyz/zhouxy/plusone/commons/util/DateTimeUtil.java
+++ b/src/main/java/xyz/zhouxy/plusone/commons/util/DateTimeUtil.java
@@ -9,31 +9,20 @@ import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
-import java.util.Objects;
import java.util.TimeZone;
-import org.apache.commons.lang3.StringUtils;
+import xyz.zhouxy.plusone.commons.collection.SafeConcurrentHashMap;
public class DateTimeUtil {
- private static final MapWrapper DATE_TIME_FORMATTER_CHCHE = MapWrapper
- .wrapHashMap()
- .keyChecker(StringUtils::isNotBlank)
- .valueChecker(Objects::nonNull)
+ private static final MapWrapper DATE_TIME_FORMATTER_CACHE = MapWrapper
+ .wrap(new SafeConcurrentHashMap<>())
+ .keyChecker(pattern -> Assert.isNotBlank(pattern, "The pattern could not be blank."))
+ .valueChecker(formatter -> Assert.notNull(formatter, "The formatter could not be null."))
.build();
public static DateTimeFormatter getDateTimeFormatter(String pattern) {
- if (!DATE_TIME_FORMATTER_CHCHE.containsKey(pattern)) {
- synchronized (DateTimeUtil.class) {
- if (!DATE_TIME_FORMATTER_CHCHE.containsKey(pattern)) {
- DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
- DATE_TIME_FORMATTER_CHCHE.put(pattern, formatter);
- return formatter;
- }
- }
- }
- return DATE_TIME_FORMATTER_CHCHE.get(pattern)
- .orElseThrow(() -> new IllegalStateException("Formatter does not exist."));
+ return DATE_TIME_FORMATTER_CACHE.computeIfAbsent(pattern, DateTimeFormatter::ofPattern);
}
public static String toString(String pattern, ZonedDateTime dateTime) {
@@ -124,7 +113,7 @@ public class DateTimeUtil {
* 只是不同时区的表示。
*
*
- * @param dateTime {@link Date} 对象
+ * @param timeMillis 时间戳
* @param zone 时区
* @return 带时区信息的地区时间
*/
@@ -189,7 +178,7 @@ public class DateTimeUtil {
/**
* 获取时间戳在指定时区的地区时间。
*
- * @param dateTime {@link Date} 对象
+ * @param timeMillis 时间戳
* @param zone 时区
* @return 地区时间
*/
From 9e388f546b054efe6e9b18782420f1f630c1f6f3 Mon Sep 17 00:00:00 2001
From: ZhouXY108
Date: Wed, 28 Jun 2023 01:06:16 +0800
Subject: [PATCH 2/6] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E4=BE=9D=E8=B5=96?=
=?UTF-8?q?=E5=86=B2=E7=AA=81=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/pom.xml b/pom.xml
index 2b3b1b7..66f96a1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -69,12 +69,24 @@
com.zaxxer
HikariCP
4.0.3
+
+
+ org.slf4j
+ slf4j-api
+
+
test
org.postgresql
postgresql
42.3.8
+
+
+ org.checkerframework
+ checker-qual
+
+
test
From d228f7d2b4cc551e68ac66436368b234f8b67daf Mon Sep 17 00:00:00 2001
From: ZhouXY108
Date: Wed, 28 Jun 2023 01:10:28 +0800
Subject: [PATCH 3/6] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?=
=?UTF-8?q?=EF=BC=8C=E6=94=B9=E6=AD=A3=20Javadoc=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../plusone/commons/function/Predicates.java | 6 +++---
.../zhouxy/plusone/commons/jdbc/DbRecord.java | 2 +-
.../commons/jdbc/SimpleJdbcTemplate.java | 4 ++--
.../plusone/commons/util/MapWrapper.java | 2 +-
.../plusone/commons/util/OptionalUtil.java | 20 +++++++++----------
.../commons/util/SnowflakeIdGenerator.java | 5 ++---
.../commons/util/SimpleJdbcTemplateTests.java | 2 +-
.../commons/util/TreeBuilderTests.java | 2 +-
8 files changed, 21 insertions(+), 22 deletions(-)
diff --git a/src/main/java/xyz/zhouxy/plusone/commons/function/Predicates.java b/src/main/java/xyz/zhouxy/plusone/commons/function/Predicates.java
index e1620f4..adb4989 100644
--- a/src/main/java/xyz/zhouxy/plusone/commons/function/Predicates.java
+++ b/src/main/java/xyz/zhouxy/plusone/commons/function/Predicates.java
@@ -42,9 +42,9 @@ public class Predicates {
* .and(StringUtils::isNotEmpty);
*
*
- * @param
- * @param predicate
- * @return
+ * @param 目标类型
+ * @param predicate 原 {@link Predicate} 实例
+ * @return 包装的 {@link Predicate} 实例
*/
public static Predicate of(Predicate super T> predicate) {
return predicate::test;
diff --git a/src/main/java/xyz/zhouxy/plusone/commons/jdbc/DbRecord.java b/src/main/java/xyz/zhouxy/plusone/commons/jdbc/DbRecord.java
index 120d26e..a233da4 100644
--- a/src/main/java/xyz/zhouxy/plusone/commons/jdbc/DbRecord.java
+++ b/src/main/java/xyz/zhouxy/plusone/commons/jdbc/DbRecord.java
@@ -59,7 +59,7 @@ public class DbRecord extends AbstractMapWrapper {
public Set getValueAsSet(String key) {
return this.>getAndConvert(key)
.map(l -> (l instanceof Set) ? (Set) l : new HashSet<>(l))
- .orElse(Collections.emptySet());
+ .orElse(Collections.emptySet());
}
public OptionalInt getValueAsInt(String key) {
diff --git a/src/main/java/xyz/zhouxy/plusone/commons/jdbc/SimpleJdbcTemplate.java b/src/main/java/xyz/zhouxy/plusone/commons/jdbc/SimpleJdbcTemplate.java
index 51d274f..819168d 100644
--- a/src/main/java/xyz/zhouxy/plusone/commons/jdbc/SimpleJdbcTemplate.java
+++ b/src/main/java/xyz/zhouxy/plusone/commons/jdbc/SimpleJdbcTemplate.java
@@ -213,7 +213,7 @@ public class SimpleJdbcTemplate {
int executeCount = params.size() / batchSize;
executeCount = (params.size() % batchSize == 0) ? executeCount : (executeCount + 1);
List result = Lists.newArrayListWithCapacity(executeCount);
-
+
try (PreparedStatement stmt = this.conn.prepareStatement(sql)) {
int i = 0;
for (Object[] ps : params) {
@@ -247,7 +247,7 @@ public class SimpleJdbcTemplate {
}
@FunctionalInterface
- public static interface IAtom {
+ public interface IAtom {
@SuppressWarnings("all")
void execute() throws SQLException, T;
}
diff --git a/src/main/java/xyz/zhouxy/plusone/commons/util/MapWrapper.java b/src/main/java/xyz/zhouxy/plusone/commons/util/MapWrapper.java
index 62a936f..7838df2 100644
--- a/src/main/java/xyz/zhouxy/plusone/commons/util/MapWrapper.java
+++ b/src/main/java/xyz/zhouxy/plusone/commons/util/MapWrapper.java
@@ -49,7 +49,7 @@ public final class MapWrapper extends AbstractMapWrapper(new HashMap<>(initialCapacity, loadFactor));
}
- public static Builder wrapTreeMap() {
+ public static , V> Builder wrapTreeMap() {
return new Builder<>(new TreeMap<>());
}
diff --git a/src/main/java/xyz/zhouxy/plusone/commons/util/OptionalUtil.java b/src/main/java/xyz/zhouxy/plusone/commons/util/OptionalUtil.java
index 05808a7..57c4660 100644
--- a/src/main/java/xyz/zhouxy/plusone/commons/util/OptionalUtil.java
+++ b/src/main/java/xyz/zhouxy/plusone/commons/util/OptionalUtil.java
@@ -55,16 +55,16 @@ public class OptionalUtil {
}
/**
- * 将 {@code Optional} 转为 {@link OptionalInt}。
+ * 将 {@code Optional} 对象转为 {@link OptionalInt} 对象。
*
* {@code Optional} 将整数包装了两次,改为使用 {@link OptionalInt} 包装其中的整数数据。
*
*
- * @param value 包装对象
+ * @param optionalObj {@code Optional} 对象
* @return {@link OptionalInt} 实例
*/
- public static OptionalInt toOptionalInt(Optional objectOptional) {
- return optionalOf(objectOptional.orElse(null));
+ public static OptionalInt toOptionalInt(Optional optionalObj) {
+ return optionalOf(optionalObj.orElse(null));
}
/**
@@ -87,11 +87,11 @@ public class OptionalUtil {
* {@code Optional} 将整数包装了两次,改为使用 {@link OptionalLong} 包装其中的整数数据。
*
*
- * @param value 包装对象
+ * @param optionalObj 包装对象
* @return {@link OptionalLong} 实例
*/
- public static OptionalLong toOptionalLong(Optional objectOptional) {
- return optionalOf(objectOptional.orElse(null));
+ public static OptionalLong toOptionalLong(Optional optionalObj) {
+ return optionalOf(optionalObj.orElse(null));
}
/**
@@ -114,11 +114,11 @@ public class OptionalUtil {
* {@code Optional} 将整数包装了两次,改为使用 {@link OptionalDouble} 包装其中的整数数据。
*
*
- * @param value 包装对象
+ * @param optionalObj 包装对象
* @return {@link OptionalDouble} 实例
*/
- public static OptionalDouble toOptionalDouble(Optional objectOptional) {
- return optionalOf(objectOptional.orElse(null));
+ public static OptionalDouble toOptionalDouble(Optional optionalObj) {
+ return optionalOf(optionalObj.orElse(null));
}
/**
diff --git a/src/main/java/xyz/zhouxy/plusone/commons/util/SnowflakeIdGenerator.java b/src/main/java/xyz/zhouxy/plusone/commons/util/SnowflakeIdGenerator.java
index 4e410b2..810eee7 100644
--- a/src/main/java/xyz/zhouxy/plusone/commons/util/SnowflakeIdGenerator.java
+++ b/src/main/java/xyz/zhouxy/plusone/commons/util/SnowflakeIdGenerator.java
@@ -42,10 +42,10 @@ public class SnowflakeIdGenerator {
private static final long SEQUENCE_MASK = -1L ^ (-1L << SEQUENCE_BITS);
/** 工作机器 ID (0~31) */
- private long workerId;
+ private final long workerId;
/** 数据中心 ID (0~31) */
- private long datacenterId;
+ private final long datacenterId;
/** 毫秒内序列 (0~4095) */
private long sequence = 0L;
@@ -78,7 +78,6 @@ public class SnowflakeIdGenerator {
* 获得下一个ID (该方法是线程安全的)
*
* @return SnowflakeId
- * @throws InterruptedException
*/
public synchronized long nextId() {
long timestamp = timeGen();
diff --git a/src/test/java/xyz/zhouxy/plusone/commons/util/SimpleJdbcTemplateTests.java b/src/test/java/xyz/zhouxy/plusone/commons/util/SimpleJdbcTemplateTests.java
index 02a87ab..d8574e1 100644
--- a/src/test/java/xyz/zhouxy/plusone/commons/util/SimpleJdbcTemplateTests.java
+++ b/src/test/java/xyz/zhouxy/plusone/commons/util/SimpleJdbcTemplateTests.java
@@ -27,7 +27,7 @@ class SimpleJdbcTemplateTests {
private static final Logger log = LoggerFactory.getLogger(SimpleJdbcTemplateTests.class);
- DataSource dataSource;
+ final DataSource dataSource;
String[] cStruct = {
"id",
diff --git a/src/test/java/xyz/zhouxy/plusone/commons/util/TreeBuilderTests.java b/src/test/java/xyz/zhouxy/plusone/commons/util/TreeBuilderTests.java
index 446ec35..dd2c063 100644
--- a/src/test/java/xyz/zhouxy/plusone/commons/util/TreeBuilderTests.java
+++ b/src/test/java/xyz/zhouxy/plusone/commons/util/TreeBuilderTests.java
@@ -31,7 +31,7 @@ class TreeBuilderTests {
MenuItem.of("C", "C2", "二级菜单C2", "/c/c2"),
MenuItem.of("C", "C3", "二级菜单C3", "/c/c3")
);
- List