From ac50c13f4f24ea3ba338ff9e547fa474dfdec423 Mon Sep 17 00:00:00 2001 From: Looly Date: Mon, 27 Oct 2025 00:31:51 +0800 Subject: [PATCH] fix code --- .../model/deepseek/DeepSeekServiceImpl.java | 2 +- .../v7/ai/model/doubao/DoubaoServiceImpl.java | 8 +- .../v7/ai/model/grok/GrokServiceImpl.java | 6 +- .../v7/ai/model/hutool/HutoolServiceImpl.java | 4 +- .../v7/ai/model/ollama/OllamaServiceImpl.java | 6 +- .../v7/ai/model/openai/OpenaiServiceImpl.java | 6 +- .../v7/ai/model/hutool/HutoolServiceTest.java | 20 +- .../v7/core/cache/impl/CacheObjIterator.java | 2 +- .../hutool/v7/core/cache/impl/LFUCache.java | 2 +- .../hutool/v7/core/cache/impl/LRUCache.java | 2 +- .../java/cn/hutool/v7/core/codec/Hashids.java | 2 +- .../java/cn/hutool/v7/core/codec/Luhn.java | 1 - .../cn/hutool/v7/core/codec/PunyCode.java | 4 +- .../hutool/v7/core/codec/binary/Base64.java | 13 +- .../codec/binary/CrockfordBase32Codec.java | 173 ++++-------------- .../hutool/v7/core/codec/binary/Z85Codec.java | 6 +- .../main/java/cn/hutool/v7/core/data/CIN.java | 40 ++-- .../main/java/cn/hutool/v7/core/data/VIN.java | 59 ++---- .../cn/hutool/v7/core/date/DateField.java | 52 ++---- .../java/cn/hutool/v7/core/date/DateUnit.java | 47 ++--- .../java/cn/hutool/v7/core/date/Month.java | 28 +-- .../java/cn/hutool/v7/core/date/Quarter.java | 19 +- .../cn/hutool/v7/core/date/TemporalUtil.java | 56 ++---- .../java/cn/hutool/v7/core/date/Week.java | 56 ++---- .../v7/core/date/chinese/ChineseDate.java | 16 +- .../v7/core/date/format/FastDateFormat.java | 3 +- .../v7/core/date/format/SimpleDateBasic.java | 3 +- .../cn/hutool/v7/core/lang/ConsoleTable.java | 4 +- .../v7/core/lang/ref/ReferenceUtil.java | 16 +- .../cn/hutool/v7/core/lang/tuple/Tuple.java | 2 +- .../cn/hutool/v7/core/math/Calculator.java | 28 +-- .../v7/core/math/ChineseNumberFormatter.java | 1 - .../v7/core/math/RomanNumberFormatter.java | 35 +--- .../java/cn/hutool/v7/core/net/Ipv4Util.java | 25 +-- .../cn/hutool/v7/core/net/url/UrlQuery.java | 17 +- .../v7/core/reflect/method/MethodUtil.java | 13 +- .../java/cn/hutool/v7/core/text/CharUtil.java | 24 ++- .../cn/hutool/v7/core/text/StrJoiner.java | 10 +- .../cn/hutool/v7/core/text/StrRepeater.java | 2 +- .../cn/hutool/v7/core/text/StrValidator.java | 2 +- .../v7/core/text/dfa/SensitiveProcessor.java | 6 +- .../v7/core/text/placeholder/StrMatcher.java | 2 +- .../hutool/v7/core/text/split/SplitUtil.java | 4 +- .../cn/hutool/v7/core/util/RuntimeUtil.java | 2 +- .../cn/hutool/v7/core/bean/DynaBeanTest.java | 1 - .../cn/hutool/v7/core/bean/ProxyBeanTest.java | 16 +- .../v7/core/cache/CacheConcurrentTest.java | 3 - .../v7/core/collection/PartitionIterTest.java | 2 +- .../v7/core/convert/EnumConvertTest.java | 30 ++- .../cn/hutool/v7/core/data/id/NanoIdTest.java | 9 +- .../v7/core/date/BetweenFormatterTest.java | 22 +-- .../cn/hutool/v7/core/lang/SingletonTest.java | 4 +- .../v7/core/map/DirectedWeightGraphTest.java | 2 - .../cn/hutool/v7/core/net/UrlDecoderTest.java | 4 +- .../cn/hutool/v7/core/util/IdUtilTest.java | 1 - .../cn/hutool/v7/core/util/JdkUtilTest.java | 1 - .../java/cn/hutool/v7/cron/TaskExecutor.java | 1 - .../pattern/CronPatternNextMatchTest.java | 1 - .../cn/hutool/v7/crypto/asymmetric/SM2.java | 16 +- .../cn/hutool/v7/crypto/asymmetric/Sign.java | 2 +- .../java/cn/hutool/v7/crypto/bc/ASN1Util.java | 20 +- .../java/cn/hutool/v7/crypto/bc/BCUtil.java | 18 +- .../v7/crypto/asymmetric/ECIESTest.java | 4 +- .../hutool/v7/crypto/asymmetric/RSATest.java | 4 +- .../hutool/v7/crypto/asymmetric/SM2Test.java | 4 +- .../main/java/cn/hutool/v7/db/Session.java | 2 +- .../cn/hutool/v7/db/meta/ResultColumn.java | 13 +- .../cn/hutool/v7/db/sql/SqlFormatter.java | 4 +- .../cn/hutool/v7/db/sql/ConditionTest.java | 2 - .../compress/archiver/StreamArchiver.java | 13 +- .../v7/extra/pinyin/engine/PinyinEngine.java | 2 +- .../template/engine/beetl/BeetlEngine.java | 26 ++- .../cn/hutool/v7/extra/aop/ProxyBeanTest.java | 16 +- .../extra/management/ManagementUtilTest.java | 1 - .../cn/hutool/v7/extra/xml/JAXBUtilTest.java | 20 +- .../hutool/v7/http/meta/HttpHeaderUtil.java | 1 - .../cn/hutool/v7/http/meta/HttpStatus.java | 20 +- .../java/cn/hutool/v7/http/meta/Method.java | 12 +- .../v7/http/multipart/MultipartFormData.java | 4 +- .../MultipartRequestInputStream.java | 7 +- .../http/server/servlet/ServletRequest.java | 3 +- .../hutool/v7/http/webservice/SoapClient.java | 16 +- .../hutool/v7/http/webservice/SoapUtil.java | 19 +- .../java/cn/hutool/v7/http/HttpUtilTest.java | 38 ++-- .../hutool/v7/http/meta/ContentTypeTest.java | 8 +- .../jwt/signers/EllipticCurveJWTSigner.java | 21 +-- .../v7/json/jwt/signers/JWTSignerUtil.java | 1 - .../cn/hutool/v7/json/reader/JSONTokener.java | 48 ++--- .../v7/json/support/JSONFormatStyle.java | 2 +- .../java/cn/hutool/v7/json/JSONNullTest.java | 22 ++- .../java/cn/hutool/v7/json/JSONUtilTest.java | 38 ++-- .../hutool/v7/json/engine/FastJSONTest.java | 11 +- .../cn/hutool/v7/json/engine/GsonTest.java | 11 +- .../hutool/v7/json/engine/HutoolJSONTest.java | 11 +- .../hutool/v7/json/engine/JSONEngineTest.java | 22 ++- .../cn/hutool/v7/json/engine/JacksonTest.java | 13 +- .../hutool/v7/json/issues/Issue1101Test.java | 57 +++--- .../hutool/v7/json/issues/Issue3139Test.java | 13 +- .../hutool/v7/json/issues/Issue3274Test.java | 13 +- .../v7/json/issues/IssueI5DHK2Test.java | 19 +- .../v7/json/issues/IssueI84V6ITest.java | 9 +- .../v7/json/issues/IssueIAWE3HTest.java | 15 +- .../hutool/v7/log/engine/log4j/Log4jLog.java | 28 +-- .../v7/log/engine/log4j2/Log4j2Log.java | 28 +-- .../v7/log/engine/slf4j/Slf4jLogEngine.java | 25 +-- .../hutool/v7/log/engine/tinylog/TinyLog.java | 33 +--- .../java/cn/hutool/v7/poi/csv/CsvParser.java | 2 +- .../v7/poi/excel/cell/CellReferenceUtil.java | 2 +- .../excel/cell/values/CompositeCellValue.java | 28 +-- .../v7/poi/excel/sax/SheetDataSaxHandler.java | 2 +- .../cn/hutool/v7/poi/csv/CsvUtilTest.java | 18 +- .../cn/hutool/v7/setting/toml/TomlReader.java | 73 +++----- .../hutool/v7/socket/nio/NioClientTest.java | 2 +- .../main/java/cn/hutool/v7/swing/img/Img.java | 10 +- .../cn/hutool/v7/swing/qrcode/QrCodeUtil.java | 16 +- 115 files changed, 685 insertions(+), 1129 deletions(-) diff --git a/hutool-ai/src/main/java/cn/hutool/v7/ai/model/deepseek/DeepSeekServiceImpl.java b/hutool-ai/src/main/java/cn/hutool/v7/ai/model/deepseek/DeepSeekServiceImpl.java index cbf89b932..75f59608a 100644 --- a/hutool-ai/src/main/java/cn/hutool/v7/ai/model/deepseek/DeepSeekServiceImpl.java +++ b/hutool-ai/src/main/java/cn/hutool/v7/ai/model/deepseek/DeepSeekServiceImpl.java @@ -65,7 +65,7 @@ public class DeepSeekServiceImpl extends BaseAIService implements DeepSeekServic @Override public void chat(List messages, Consumer callback) { Map paramMap = buildChatStreamRequestBody(messages); - ThreadUtil.newThread(() -> sendPostStream(CHAT_ENDPOINT, paramMap, callback::accept), "deepseek-chat-sse").start(); + ThreadUtil.newThread(() -> sendPostStream(CHAT_ENDPOINT, paramMap, callback), "deepseek-chat-sse").start(); } @Override diff --git a/hutool-ai/src/main/java/cn/hutool/v7/ai/model/doubao/DoubaoServiceImpl.java b/hutool-ai/src/main/java/cn/hutool/v7/ai/model/doubao/DoubaoServiceImpl.java index 31e4d4442..8aa32a82a 100644 --- a/hutool-ai/src/main/java/cn/hutool/v7/ai/model/doubao/DoubaoServiceImpl.java +++ b/hutool-ai/src/main/java/cn/hutool/v7/ai/model/doubao/DoubaoServiceImpl.java @@ -74,7 +74,7 @@ public class DoubaoServiceImpl extends BaseAIService implements DoubaoService { @Override public void chat(final List messages, final Consumer callback) { final Map paramMap = buildChatStreamRequestBody(messages); - ThreadUtil.newThread(() -> sendPostStream(CHAT_ENDPOINT, paramMap, callback::accept), "doubao-chat-sse").start(); + ThreadUtil.newThread(() -> sendPostStream(CHAT_ENDPOINT, paramMap, callback), "doubao-chat-sse").start(); } @Override @@ -87,7 +87,7 @@ public class DoubaoServiceImpl extends BaseAIService implements DoubaoService { @Override public void chatVision(final String prompt, final List images, final String detail, final Consumer callback) { final Map paramMap = buildChatVisionStreamRequestBody(prompt, images, detail); - ThreadUtil.newThread(() -> sendPostStream(CHAT_ENDPOINT, paramMap, callback::accept), "doubao-chatVision-sse").start(); + ThreadUtil.newThread(() -> sendPostStream(CHAT_ENDPOINT, paramMap, callback), "doubao-chatVision-sse").start(); } @Override @@ -128,7 +128,7 @@ public class DoubaoServiceImpl extends BaseAIService implements DoubaoService { @Override public void botsChat(final List messages, final Consumer callback) { final Map paramMap = buildBotsChatStreamRequestBody(messages); - ThreadUtil.newThread(() -> sendPostStream(BOTS_CHAT, paramMap, callback::accept), "doubao-botsChat-sse").start(); + ThreadUtil.newThread(() -> sendPostStream(BOTS_CHAT, paramMap, callback), "doubao-botsChat-sse").start(); } @Override @@ -162,7 +162,7 @@ public class DoubaoServiceImpl extends BaseAIService implements DoubaoService { @Override public void chatContext(final List messages, final String contextId, final Consumer callback) { final Map paramMap = buildChatContentStreamRequestBody(messages, contextId); - ThreadUtil.newThread(() -> sendPostStream(CHAT_CONTEXT, paramMap, callback::accept), "doubao-chatContext-sse").start(); + ThreadUtil.newThread(() -> sendPostStream(CHAT_CONTEXT, paramMap, callback), "doubao-chatContext-sse").start(); } @Override diff --git a/hutool-ai/src/main/java/cn/hutool/v7/ai/model/grok/GrokServiceImpl.java b/hutool-ai/src/main/java/cn/hutool/v7/ai/model/grok/GrokServiceImpl.java index f88566313..dc2f61a46 100644 --- a/hutool-ai/src/main/java/cn/hutool/v7/ai/model/grok/GrokServiceImpl.java +++ b/hutool-ai/src/main/java/cn/hutool/v7/ai/model/grok/GrokServiceImpl.java @@ -67,7 +67,7 @@ public class GrokServiceImpl extends BaseAIService implements GrokService { @Override public void chat(List messages, Consumer callback) { Map paramMap = buildChatStreamRequestBody(messages); - ThreadUtil.newThread(() -> sendPostStream(CHAT_ENDPOINT, paramMap, callback::accept), "grok-chat-sse").start(); + ThreadUtil.newThread(() -> sendPostStream(CHAT_ENDPOINT, paramMap, callback), "grok-chat-sse").start(); } @Override @@ -80,7 +80,7 @@ public class GrokServiceImpl extends BaseAIService implements GrokService { @Override public void message(List messages, int maxToken, final Consumer callback) { Map paramMap = buildMessageStreamRequestBody(messages, maxToken); - ThreadUtil.newThread(() -> sendPostStream(MESSAGES, paramMap, callback::accept), "grok-message-sse").start(); + ThreadUtil.newThread(() -> sendPostStream(MESSAGES, paramMap, callback), "grok-message-sse").start(); } @Override @@ -93,7 +93,7 @@ public class GrokServiceImpl extends BaseAIService implements GrokService { @Override public void chatVision(String prompt, List images, String detail, Consumer callback) { Map paramMap = buildChatVisionStreamRequestBody(prompt, images, detail); - ThreadUtil.newThread(() -> sendPostStream(CHAT_ENDPOINT, paramMap, callback::accept), "grok-chatVision-sse").start(); + ThreadUtil.newThread(() -> sendPostStream(CHAT_ENDPOINT, paramMap, callback), "grok-chatVision-sse").start(); } @Override diff --git a/hutool-ai/src/main/java/cn/hutool/v7/ai/model/hutool/HutoolServiceImpl.java b/hutool-ai/src/main/java/cn/hutool/v7/ai/model/hutool/HutoolServiceImpl.java index 5a7496bf0..1869b1149 100644 --- a/hutool-ai/src/main/java/cn/hutool/v7/ai/model/hutool/HutoolServiceImpl.java +++ b/hutool-ai/src/main/java/cn/hutool/v7/ai/model/hutool/HutoolServiceImpl.java @@ -71,7 +71,7 @@ public class HutoolServiceImpl extends BaseAIService implements HutoolService { @Override public void chat(List messages,Consumer callback) { Map paramMap = buildChatStreamRequestBody(messages); - ThreadUtil.newThread(() -> sendPostStream(CHAT_ENDPOINT, paramMap, callback::accept), "hutool-chat-sse").start(); + ThreadUtil.newThread(() -> sendPostStream(CHAT_ENDPOINT, paramMap, callback), "hutool-chat-sse").start(); } @Override @@ -85,7 +85,7 @@ public class HutoolServiceImpl extends BaseAIService implements HutoolService { public void chatVision(String prompt, List images, String detail, Consumer callback) { Map paramMap = buildChatVisionStreamRequestBody(prompt, images, detail); System.out.println(JSONUtil.toJsonStr(paramMap)); - ThreadUtil.newThread(() -> sendPostStream(CHAT_ENDPOINT, paramMap, callback::accept), "hutool-chatVision-sse").start(); + ThreadUtil.newThread(() -> sendPostStream(CHAT_ENDPOINT, paramMap, callback), "hutool-chatVision-sse").start(); } @Override diff --git a/hutool-ai/src/main/java/cn/hutool/v7/ai/model/ollama/OllamaServiceImpl.java b/hutool-ai/src/main/java/cn/hutool/v7/ai/model/ollama/OllamaServiceImpl.java index 675b54fa2..c42ded8eb 100644 --- a/hutool-ai/src/main/java/cn/hutool/v7/ai/model/ollama/OllamaServiceImpl.java +++ b/hutool-ai/src/main/java/cn/hutool/v7/ai/model/ollama/OllamaServiceImpl.java @@ -84,7 +84,7 @@ public class OllamaServiceImpl extends BaseAIService implements OllamaService { @Override public void chat(final List messages, final Consumer callback) { final Map paramMap = buildChatStreamRequestBody(messages); - ThreadUtil.newThread(() -> sendPostStream(CHAT_ENDPOINT, paramMap, callback::accept), "ollama-chat-sse").start(); + ThreadUtil.newThread(() -> sendPostStream(CHAT_ENDPOINT, paramMap, callback), "ollama-chat-sse").start(); } @Override @@ -97,7 +97,7 @@ public class OllamaServiceImpl extends BaseAIService implements OllamaService { @Override public void generate(final String prompt, final Consumer callback) { final Map paramMap = buildGenerateStreamRequestBody(prompt, null); - ThreadUtil.newThread(() -> sendPostStream(GENERATE_ENDPOINT, paramMap, callback::accept), "ollama-generate-sse").start(); + ThreadUtil.newThread(() -> sendPostStream(GENERATE_ENDPOINT, paramMap, callback), "ollama-generate-sse").start(); } @Override @@ -110,7 +110,7 @@ public class OllamaServiceImpl extends BaseAIService implements OllamaService { @Override public void generate(final String prompt, final String format, final Consumer callback) { final Map paramMap = buildGenerateStreamRequestBody(prompt, format); - ThreadUtil.newThread(() -> sendPostStream(GENERATE_ENDPOINT, paramMap, callback::accept), "ollama-generate-sse").start(); + ThreadUtil.newThread(() -> sendPostStream(GENERATE_ENDPOINT, paramMap, callback), "ollama-generate-sse").start(); } @Override diff --git a/hutool-ai/src/main/java/cn/hutool/v7/ai/model/openai/OpenaiServiceImpl.java b/hutool-ai/src/main/java/cn/hutool/v7/ai/model/openai/OpenaiServiceImpl.java index 9fedc8511..f051173c1 100644 --- a/hutool-ai/src/main/java/cn/hutool/v7/ai/model/openai/OpenaiServiceImpl.java +++ b/hutool-ai/src/main/java/cn/hutool/v7/ai/model/openai/OpenaiServiceImpl.java @@ -72,7 +72,7 @@ public class OpenaiServiceImpl extends BaseAIService implements OpenaiService { @Override public void chat(List messages, Consumer callback) { Map paramMap = buildChatStreamRequestBody(messages); - ThreadUtil.newThread(() -> sendPostStream(CHAT_ENDPOINT, paramMap, callback::accept), "openai-chat-sse").start(); + ThreadUtil.newThread(() -> sendPostStream(CHAT_ENDPOINT, paramMap, callback), "openai-chat-sse").start(); } @Override @@ -85,7 +85,7 @@ public class OpenaiServiceImpl extends BaseAIService implements OpenaiService { @Override public void chatVision(String prompt, List images, String detail, Consumer callback) { Map paramMap = buildChatVisionStreamRequestBody(prompt, images, detail); - ThreadUtil.newThread(() -> sendPostStream(CHAT_ENDPOINT, paramMap, callback::accept), "openai-chatVision-sse").start(); + ThreadUtil.newThread(() -> sendPostStream(CHAT_ENDPOINT, paramMap, callback), "openai-chatVision-sse").start(); } @Override @@ -147,7 +147,7 @@ public class OpenaiServiceImpl extends BaseAIService implements OpenaiService { @Override public void chatReasoning(List messages, String reasoningEffort, Consumer callback) { Map paramMap = buildChatReasoningStreamRequestBody(messages, reasoningEffort); - ThreadUtil.newThread(() -> sendPostStream(CHAT_ENDPOINT, paramMap, callback::accept), "openai-chatReasoning-sse").start(); + ThreadUtil.newThread(() -> sendPostStream(CHAT_ENDPOINT, paramMap, callback), "openai-chatReasoning-sse").start(); } // 构建chat请求体 diff --git a/hutool-ai/src/test/java/cn/hutool/v7/ai/model/hutool/HutoolServiceTest.java b/hutool-ai/src/test/java/cn/hutool/v7/ai/model/hutool/HutoolServiceTest.java index 76f26a351..6b0eb2684 100644 --- a/hutool-ai/src/test/java/cn/hutool/v7/ai/model/hutool/HutoolServiceTest.java +++ b/hutool-ai/src/test/java/cn/hutool/v7/ai/model/hutool/HutoolServiceTest.java @@ -27,15 +27,14 @@ import cn.hutool.v7.swing.img.ImgUtil; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; -import java.awt.*; +import java.awt.Toolkit; import java.io.File; import java.io.InputStream; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertNotNull; class HutoolServiceTest { @@ -88,7 +87,7 @@ class HutoolServiceTest { @Disabled void chatVision() { final String base64 = ImgUtil.toBase64DataUri(Toolkit.getDefaultToolkit().createImage("your imageUrl"), "png"); - final String chatVision = hutoolService.chatVision("图片上有些什么?", Arrays.asList(base64)); + final String chatVision = hutoolService.chatVision("图片上有些什么?", List.of(base64)); assertNotNull(chatVision); } @@ -96,7 +95,7 @@ class HutoolServiceTest { @Disabled void testChatVisionStream() { String prompt = "图片上有些什么?"; - List images = Arrays.asList("https://img2.baidu.com/it/u=862000265,4064861820&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=1544"); + List images = List.of("https://img2.baidu.com/it/u=862000265,4064861820&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=1544"); // 使用AtomicBoolean作为结束标志 AtomicBoolean isDone = new AtomicBoolean(false); @@ -119,7 +118,7 @@ class HutoolServiceTest { @Test @Disabled void testChatVision() { - final String chatVision = hutoolService.chatVision("图片上有些什么?", Arrays.asList("https://img2.baidu.com/it/u=862000265,4064861820&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=1544")); + final String chatVision = hutoolService.chatVision("图片上有些什么?", List.of("https://img2.baidu.com/it/u=862000265,4064861820&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=1544")); assertNotNull(chatVision); } @@ -150,10 +149,11 @@ class HutoolServiceTest { void textToSpeech() { try { // 测试正常音频流返回 - final InputStream inputStream = hutoolService.tts("万里山河一夜白,\n" + - "千峰尽染玉龙哀。\n" + - "长风卷起琼花碎,\n" + - "直上九霄揽月来。", HutoolCommon.HutoolSpeech.NOVA); + final InputStream inputStream = hutoolService.tts(""" + 万里山河一夜白, + 千峰尽染玉龙哀。 + 长风卷起琼花碎, + 直上九霄揽月来。""", HutoolCommon.HutoolSpeech.NOVA); assertNotNull(inputStream); // 保存音频文件 diff --git a/hutool-core/src/main/java/cn/hutool/v7/core/cache/impl/CacheObjIterator.java b/hutool-core/src/main/java/cn/hutool/v7/core/cache/impl/CacheObjIterator.java index 163eefde4..f2d0f0e2c 100644 --- a/hutool-core/src/main/java/cn/hutool/v7/core/cache/impl/CacheObjIterator.java +++ b/hutool-core/src/main/java/cn/hutool/v7/core/cache/impl/CacheObjIterator.java @@ -88,7 +88,7 @@ public class CacheObjIterator implements Iterator>, Seriali private void nextValue() { while (iterator.hasNext()) { nextValue = iterator.next(); - if (nextValue.isExpired() == false) { + if (!nextValue.isExpired()) { return; } } diff --git a/hutool-core/src/main/java/cn/hutool/v7/core/cache/impl/LFUCache.java b/hutool-core/src/main/java/cn/hutool/v7/core/cache/impl/LFUCache.java index de34c3b99..3521acda2 100644 --- a/hutool-core/src/main/java/cn/hutool/v7/core/cache/impl/LFUCache.java +++ b/hutool-core/src/main/java/cn/hutool/v7/core/cache/impl/LFUCache.java @@ -84,7 +84,7 @@ public class LFUCache extends LockedCache { CacheObj co; while (values.hasNext()) { co = values.next(); - if (co.isExpired() == true) { + if (co.isExpired()) { values.remove(); onRemove(co.key, co.obj); count++; diff --git a/hutool-core/src/main/java/cn/hutool/v7/core/cache/impl/LRUCache.java b/hutool-core/src/main/java/cn/hutool/v7/core/cache/impl/LRUCache.java index cdb0cc55b..035fabbde 100644 --- a/hutool-core/src/main/java/cn/hutool/v7/core/cache/impl/LRUCache.java +++ b/hutool-core/src/main/java/cn/hutool/v7/core/cache/impl/LRUCache.java @@ -79,7 +79,7 @@ public class LRUCache extends LockedCache { */ @Override protected int pruneCache() { - if (isPruneExpiredActive() == false) { + if (!isPruneExpiredActive()) { return 0; } int count = 0; diff --git a/hutool-core/src/main/java/cn/hutool/v7/core/codec/Hashids.java b/hutool-core/src/main/java/cn/hutool/v7/core/codec/Hashids.java index 3bb10bca9..e51123959 100644 --- a/hutool-core/src/main/java/cn/hutool/v7/core/codec/Hashids.java +++ b/hutool-core/src/main/java/cn/hutool/v7/core/codec/Hashids.java @@ -377,7 +377,7 @@ public class Hashids implements Encoder, Decoder } } - if (block.length() > 0) { + if (!block.isEmpty()) { // create the salt if (saltLeft > 0) { System.arraycopy(currentAlphabet, 0, decodeSalt, diff --git a/hutool-core/src/main/java/cn/hutool/v7/core/codec/Luhn.java b/hutool-core/src/main/java/cn/hutool/v7/core/codec/Luhn.java index ec401381e..8267e21f9 100644 --- a/hutool-core/src/main/java/cn/hutool/v7/core/codec/Luhn.java +++ b/hutool-core/src/main/java/cn/hutool/v7/core/codec/Luhn.java @@ -73,7 +73,6 @@ public class Luhn { final char[] strArray = str.toCharArray(); final int n = strArray.length; int sum = strArray[n - 1] - '0'; - ; for (int i = 2; i <= n; i++) { int a = strArray[n - i] - '0'; // 偶数位乘以2 diff --git a/hutool-core/src/main/java/cn/hutool/v7/core/codec/PunyCode.java b/hutool-core/src/main/java/cn/hutool/v7/core/codec/PunyCode.java index 3b01a134b..e1d65e27b 100644 --- a/hutool-core/src/main/java/cn/hutool/v7/core/codec/PunyCode.java +++ b/hutool-core/src/main/java/cn/hutool/v7/core/codec/PunyCode.java @@ -55,7 +55,7 @@ public class PunyCode { final List split = SplitUtil.split(domain, StrUtil.DOT); final StringBuilder result = new StringBuilder(domain.length() * 4); for (final String str : split) { - if (result.length() != 0) { + if (!result.isEmpty()) { result.append(CharUtil.DOT); } result.append(encode(str, true)); @@ -175,7 +175,7 @@ public class PunyCode { final List split = SplitUtil.split(domain, StrUtil.DOT); final StringBuilder result = new StringBuilder(domain.length() / 4 + 1); for (final String str : split) { - if (result.length() != 0) { + if (!result.isEmpty()) { result.append(CharUtil.DOT); } result.append(StrUtil.startWithIgnoreEquals(str, PUNY_CODE_PREFIX) ? decode(str) : str); diff --git a/hutool-core/src/main/java/cn/hutool/v7/core/codec/binary/Base64.java b/hutool-core/src/main/java/cn/hutool/v7/core/codec/binary/Base64.java index 730c1d1d9..660b380f0 100644 --- a/hutool-core/src/main/java/cn/hutool/v7/core/codec/binary/Base64.java +++ b/hutool-core/src/main/java/cn/hutool/v7/core/codec/binary/Base64.java @@ -321,14 +321,9 @@ public class Base64 { } private static boolean isWhiteSpace(final byte byteToCheck) { - switch (byteToCheck) { - case ' ': - case '\n': - case '\r': - case '\t': - return true; - default: - return false; - } + return switch (byteToCheck) { + case ' ', '\n', '\r', '\t' -> true; + default -> false; + }; } } diff --git a/hutool-core/src/main/java/cn/hutool/v7/core/codec/binary/CrockfordBase32Codec.java b/hutool-core/src/main/java/cn/hutool/v7/core/codec/binary/CrockfordBase32Codec.java index 5fce4727d..932333c16 100644 --- a/hutool-core/src/main/java/cn/hutool/v7/core/codec/binary/CrockfordBase32Codec.java +++ b/hutool-core/src/main/java/cn/hutool/v7/core/codec/binary/CrockfordBase32Codec.java @@ -23,7 +23,7 @@ import java.util.Objects; /** * Crockford`s Base32实现
- * 来自:https://gist.github.com/markov/5206312 + * 来自:markov/5206312 * *

Provides Base32 encoding and decoding as defined by RFC 4648. * However it uses a custom alphabet first coined by Douglas Crockford. Only addition to the alphabet is that 'u' and @@ -141,15 +141,10 @@ public class CrockfordBase32Codec { * @return true if byte is whitespace, false otherwise */ protected static boolean isWhiteSpace(final byte byteToCheck) { - switch (byteToCheck) { - case ' ': - case '\n': - case '\r': - case '\t': - return true; - default: - return false; - } + return switch (byteToCheck) { + case ' ', '\n', '\r', '\t' -> true; + default -> false; + }; } /** @@ -609,128 +604,40 @@ public class CrockfordBase32Codec { } private static byte decode(final byte octet) { - switch (octet) { - case '0': - case 'O': - case 'o': - return 0; - - case '1': - case 'I': - case 'i': - case 'L': - case 'l': - return 1; - - case '2': - return 2; - case '3': - return 3; - case '4': - return 4; - case '5': - return 5; - case '6': - return 6; - case '7': - return 7; - case '8': - return 8; - case '9': - return 9; - - case 'A': - case 'a': - return 10; - - case 'B': - case 'b': - return 11; - - case 'C': - case 'c': - return 12; - - case 'D': - case 'd': - return 13; - - case 'E': - case 'e': - return 14; - - case 'F': - case 'f': - return 15; - - case 'G': - case 'g': - return 16; - - case 'H': - case 'h': - return 17; - - case 'J': - case 'j': - return 18; - - case 'K': - case 'k': - return 19; - - case 'M': - case 'm': - return 20; - - case 'N': - case 'n': - return 21; - - case 'P': - case 'p': - return 22; - - case 'Q': - case 'q': - return 23; - - case 'R': - case 'r': - return 24; - - case 'S': - case 's': - return 25; - - case 'T': - case 't': - return 26; - - case 'U': - case 'u': - case 'V': - case 'v': - return 27; - - case 'W': - case 'w': - return 28; - - case 'X': - case 'x': - return 29; - - case 'Y': - case 'y': - return 30; - - case 'Z': - case 'z': - return 31; - - default: - return -1; - } + return switch (octet) { + case '0', 'O', 'o' -> 0; + case '1', 'I', 'i', 'L', 'l' -> 1; + case '2' -> 2; + case '3' -> 3; + case '4' -> 4; + case '5' -> 5; + case '6' -> 6; + case '7' -> 7; + case '8' -> 8; + case '9' -> 9; + case 'A', 'a' -> 10; + case 'B', 'b' -> 11; + case 'C', 'c' -> 12; + case 'D', 'd' -> 13; + case 'E', 'e' -> 14; + case 'F', 'f' -> 15; + case 'G', 'g' -> 16; + case 'H', 'h' -> 17; + case 'J', 'j' -> 18; + case 'K', 'k' -> 19; + case 'M', 'm' -> 20; + case 'N', 'n' -> 21; + case 'P', 'p' -> 22; + case 'Q', 'q' -> 23; + case 'R', 'r' -> 24; + case 'S', 's' -> 25; + case 'T', 't' -> 26; + case 'U', 'u', 'V', 'v' -> 27; + case 'W', 'w' -> 28; + case 'X', 'x' -> 29; + case 'Y', 'y' -> 30; + case 'Z', 'z' -> 31; + default -> -1; + }; } } diff --git a/hutool-core/src/main/java/cn/hutool/v7/core/codec/binary/Z85Codec.java b/hutool-core/src/main/java/cn/hutool/v7/core/codec/binary/Z85Codec.java index a73a948d5..685d2cde7 100644 --- a/hutool-core/src/main/java/cn/hutool/v7/core/codec/binary/Z85Codec.java +++ b/hutool-core/src/main/java/cn/hutool/v7/core/codec/binary/Z85Codec.java @@ -101,11 +101,7 @@ public class Z85Codec implements Encoder, Decoder '2'; + case 9 -> '3'; + case 8 -> '4'; + case 7 -> '5'; + case 6 -> '6'; + case 5 -> '7'; + case 4 -> '8'; + case 3 -> '9'; + case 2 -> 'X'; + case 1 -> '0'; + case 0 -> '1'; + default -> CharUtil.SPACE; + }; } /** diff --git a/hutool-core/src/main/java/cn/hutool/v7/core/data/VIN.java b/hutool-core/src/main/java/cn/hutool/v7/core/data/VIN.java index 511bd80ff..7e9ebf8a0 100644 --- a/hutool-core/src/main/java/cn/hutool/v7/core/data/VIN.java +++ b/hutool-core/src/main/java/cn/hutool/v7/core/data/VIN.java @@ -256,51 +256,18 @@ public class VIN { * @return 对应值 */ private static int getVinValue(final char vinCodeChar) { - switch (vinCodeChar) { - case '0': - return 0; - case '1': - case 'J': - case 'A': - return 1; - case '2': - case 'S': - case 'K': - case 'B': - return 2; - case '3': - case 'T': - case 'L': - case 'C': - return 3; - case '4': - case 'U': - case 'M': - case 'D': - return 4; - case '5': - case 'V': - case 'N': - case 'E': - return 5; - case '6': - case 'W': - case 'F': - return 6; - case '7': - case 'P': - case 'X': - case 'G': - return 7; - case '8': - case 'Y': - case 'H': - return 8; - case '9': - case 'Z': - case 'R': - return 9; - } - throw new IllegalArgumentException("Invalid VIN char: " + vinCodeChar); + return switch (vinCodeChar) { + case '0' -> 0; + case '1', 'J', 'A' -> 1; + case '2', 'S', 'K', 'B' -> 2; + case '3', 'T', 'L', 'C' -> 3; + case '4', 'U', 'M', 'D' -> 4; + case '5', 'V', 'N', 'E' -> 5; + case '6', 'W', 'F' -> 6; + case '7', 'P', 'X', 'G' -> 7; + case '8', 'Y', 'H' -> 8; + case '9', 'Z', 'R' -> 9; + default -> throw new IllegalArgumentException("Invalid VIN char: " + vinCodeChar); + }; } } diff --git a/hutool-core/src/main/java/cn/hutool/v7/core/date/DateField.java b/hutool-core/src/main/java/cn/hutool/v7/core/date/DateField.java index e33e386be..f493c1ebe 100644 --- a/hutool-core/src/main/java/cn/hutool/v7/core/date/DateField.java +++ b/hutool-core/src/main/java/cn/hutool/v7/core/date/DateField.java @@ -140,39 +140,23 @@ public enum DateField { * @return DateField */ public static DateField of(final int calendarPartIntValue) { - switch (calendarPartIntValue) { - case Calendar.ERA: - return ERA; - case Calendar.YEAR: - return YEAR; - case Calendar.MONTH: - return MONTH; - case Calendar.WEEK_OF_YEAR: - return WEEK_OF_YEAR; - case Calendar.WEEK_OF_MONTH: - return WEEK_OF_MONTH; - case Calendar.DAY_OF_MONTH: - return DAY_OF_MONTH; - case Calendar.DAY_OF_YEAR: - return DAY_OF_YEAR; - case Calendar.DAY_OF_WEEK: - return DAY_OF_WEEK; - case Calendar.DAY_OF_WEEK_IN_MONTH: - return DAY_OF_WEEK_IN_MONTH; - case Calendar.AM_PM: - return AM_PM; - case Calendar.HOUR: - return HOUR; - case Calendar.HOUR_OF_DAY: - return HOUR_OF_DAY; - case Calendar.MINUTE: - return MINUTE; - case Calendar.SECOND: - return SECOND; - case Calendar.MILLISECOND: - return MILLISECOND; - default: - return null; - } + return switch (calendarPartIntValue) { + case Calendar.ERA -> ERA; + case Calendar.YEAR -> YEAR; + case Calendar.MONTH -> MONTH; + case Calendar.WEEK_OF_YEAR -> WEEK_OF_YEAR; + case Calendar.WEEK_OF_MONTH -> WEEK_OF_MONTH; + case Calendar.DAY_OF_MONTH -> DAY_OF_MONTH; + case Calendar.DAY_OF_YEAR -> DAY_OF_YEAR; + case Calendar.DAY_OF_WEEK -> DAY_OF_WEEK; + case Calendar.DAY_OF_WEEK_IN_MONTH -> DAY_OF_WEEK_IN_MONTH; + case Calendar.AM_PM -> AM_PM; + case Calendar.HOUR -> HOUR; + case Calendar.HOUR_OF_DAY -> HOUR_OF_DAY; + case Calendar.MINUTE -> MINUTE; + case Calendar.SECOND -> SECOND; + case Calendar.MILLISECOND -> MILLISECOND; + default -> null; + }; } } diff --git a/hutool-core/src/main/java/cn/hutool/v7/core/date/DateUnit.java b/hutool-core/src/main/java/cn/hutool/v7/core/date/DateUnit.java index 91f4b832d..42a792fed 100644 --- a/hutool-core/src/main/java/cn/hutool/v7/core/date/DateUnit.java +++ b/hutool-core/src/main/java/cn/hutool/v7/core/date/DateUnit.java @@ -80,21 +80,15 @@ public enum DateUnit { * @since 5.4.5 */ public static DateUnit of(final ChronoUnit unit) { - switch (unit) { - case MICROS: - return DateUnit.MS; - case SECONDS: - return DateUnit.SECOND; - case MINUTES: - return DateUnit.MINUTE; - case HOURS: - return DateUnit.HOUR; - case DAYS: - return DateUnit.DAY; - case WEEKS: - return DateUnit.WEEK; - } - return null; + return switch (unit) { + case MICROS -> DateUnit.MS; + case SECONDS -> DateUnit.SECOND; + case MINUTES -> DateUnit.MINUTE; + case HOURS -> DateUnit.HOUR; + case DAYS -> DateUnit.DAY; + case WEEKS -> DateUnit.WEEK; + default -> null; + }; } /** @@ -105,20 +99,13 @@ public enum DateUnit { * @since 5.4.5 */ public static ChronoUnit toChronoUnit(final DateUnit unit) { - switch (unit) { - case MS: - return ChronoUnit.MICROS; - case SECOND: - return ChronoUnit.SECONDS; - case MINUTE: - return ChronoUnit.MINUTES; - case HOUR: - return ChronoUnit.HOURS; - case DAY: - return ChronoUnit.DAYS; - case WEEK: - return ChronoUnit.WEEKS; - } - return null; + return switch (unit) { + case MS -> ChronoUnit.MICROS; + case SECOND -> ChronoUnit.SECONDS; + case MINUTE -> ChronoUnit.MINUTES; + case HOUR -> ChronoUnit.HOURS; + case DAY -> ChronoUnit.DAYS; + case WEEK -> ChronoUnit.WEEKS; + }; } } diff --git a/hutool-core/src/main/java/cn/hutool/v7/core/date/Month.java b/hutool-core/src/main/java/cn/hutool/v7/core/date/Month.java index 28f494a3e..a4f16aa26 100644 --- a/hutool-core/src/main/java/cn/hutool/v7/core/date/Month.java +++ b/hutool-core/src/main/java/cn/hutool/v7/core/date/Month.java @@ -142,17 +142,11 @@ public enum Month { * @return 此月份最后一天的值 */ public int getLastDay(final boolean isLeapYear) { - switch (this) { - case FEBRUARY: - return isLeapYear ? 29 : 28; - case APRIL: - case JUNE: - case SEPTEMBER: - case NOVEMBER: - return 30; - default: - return 31; - } + return switch (this) { + case FEBRUARY -> isLeapYear ? 29 : 28; + case APRIL, JUNE, SEPTEMBER, NOVEMBER -> 30; + default -> 31; + }; } /** @@ -249,13 +243,11 @@ public enum Month { case '九': return SEPTEMBER; case '十': - switch (Character.toLowerCase(name.charAt(1))){ - case '一': - return NOVEMBER; - case '二': - return DECEMBER; - } - return OCTOBER; + return switch (Character.toLowerCase(name.charAt(1))) { + case '一' -> NOVEMBER; + case '二' -> DECEMBER; + default -> OCTOBER; + }; } } diff --git a/hutool-core/src/main/java/cn/hutool/v7/core/date/Quarter.java b/hutool-core/src/main/java/cn/hutool/v7/core/date/Quarter.java index c51aca273..5d89c0a7f 100644 --- a/hutool-core/src/main/java/cn/hutool/v7/core/date/Quarter.java +++ b/hutool-core/src/main/java/cn/hutool/v7/core/date/Quarter.java @@ -75,18 +75,13 @@ public enum Quarter { * @see #Q4 */ public static Quarter of(final int intValue) { - switch (intValue) { - case 1: - return Q1; - case 2: - return Q2; - case 3: - return Q3; - case 4: - return Q4; - default: - return null; - } + return switch (intValue) { + case 1 -> Q1; + case 2 -> Q2; + case 3 -> Q3; + case 4 -> Q4; + default -> null; + }; } /** diff --git a/hutool-core/src/main/java/cn/hutool/v7/core/date/TemporalUtil.java b/hutool-core/src/main/java/cn/hutool/v7/core/date/TemporalUtil.java index fc5aa2dc0..7feb67e7e 100644 --- a/hutool-core/src/main/java/cn/hutool/v7/core/date/TemporalUtil.java +++ b/hutool-core/src/main/java/cn/hutool/v7/core/date/TemporalUtil.java @@ -71,24 +71,16 @@ public class TemporalUtil { if (null == unit) { return null; } - switch (unit) { - case NANOSECONDS: - return ChronoUnit.NANOS; - case MICROSECONDS: - return ChronoUnit.MICROS; - case MILLISECONDS: - return ChronoUnit.MILLIS; - case SECONDS: - return ChronoUnit.SECONDS; - case MINUTES: - return ChronoUnit.MINUTES; - case HOURS: - return ChronoUnit.HOURS; - case DAYS: - return ChronoUnit.DAYS; - default: - throw new IllegalArgumentException("Unknown TimeUnit constant"); - } + return switch (unit) { + case NANOSECONDS -> ChronoUnit.NANOS; + case MICROSECONDS -> ChronoUnit.MICROS; + case MILLISECONDS -> ChronoUnit.MILLIS; + case SECONDS -> ChronoUnit.SECONDS; + case MINUTES -> ChronoUnit.MINUTES; + case HOURS -> ChronoUnit.HOURS; + case DAYS -> ChronoUnit.DAYS; + default -> throw new IllegalArgumentException("Unknown TimeUnit constant"); + }; } /** @@ -103,24 +95,16 @@ public class TemporalUtil { if (null == unit) { return null; } - switch (unit) { - case NANOS: - return TimeUnit.NANOSECONDS; - case MICROS: - return TimeUnit.MICROSECONDS; - case MILLIS: - return TimeUnit.MILLISECONDS; - case SECONDS: - return TimeUnit.SECONDS; - case MINUTES: - return TimeUnit.MINUTES; - case HOURS: - return TimeUnit.HOURS; - case DAYS: - return TimeUnit.DAYS; - default: - throw new IllegalArgumentException("ChronoUnit cannot be converted to TimeUnit: " + unit); - } + return switch (unit) { + case NANOS -> TimeUnit.NANOSECONDS; + case MICROS -> TimeUnit.MICROSECONDS; + case MILLIS -> TimeUnit.MILLISECONDS; + case SECONDS -> TimeUnit.SECONDS; + case MINUTES -> TimeUnit.MINUTES; + case HOURS -> TimeUnit.HOURS; + case DAYS -> TimeUnit.DAYS; + default -> throw new IllegalArgumentException("ChronoUnit cannot be converted to TimeUnit: " + unit); + }; } /** diff --git a/hutool-core/src/main/java/cn/hutool/v7/core/date/Week.java b/hutool-core/src/main/java/cn/hutool/v7/core/date/Week.java index 967c12f52..fa3a935f2 100644 --- a/hutool-core/src/main/java/cn/hutool/v7/core/date/Week.java +++ b/hutool-core/src/main/java/cn/hutool/v7/core/date/Week.java @@ -124,24 +124,15 @@ public enum Week { * @since 4.0.11 */ public String toChinese(final String weekNamePre) { - switch (this) { - case SUNDAY: - return weekNamePre + "日"; - case MONDAY: - return weekNamePre + "一"; - case TUESDAY: - return weekNamePre + "二"; - case WEDNESDAY: - return weekNamePre + "三"; - case THURSDAY: - return weekNamePre + "四"; - case FRIDAY: - return weekNamePre + "五"; - case SATURDAY: - return weekNamePre + "六"; - default: - return null; - } + return switch (this) { + case SUNDAY -> weekNamePre + "日"; + case MONDAY -> weekNamePre + "一"; + case TUESDAY -> weekNamePre + "二"; + case WEDNESDAY -> weekNamePre + "三"; + case THURSDAY -> weekNamePre + "四"; + case FRIDAY -> weekNamePre + "五"; + case SATURDAY -> weekNamePre + "六"; + }; } /** @@ -176,7 +167,7 @@ public enum Week { /** * 解析别名为Week对象,别名如:sun或者SUNDAY,不区分大小写
- * 参考:https://github.com/sisyphsu/dateparser/blob/master/src/main/java/com/github/sisyphsu/dateparser/DateParser.java#L319 + * 参考:DateParser.java#L319 * * @param name 别名值 * @return 周枚举Week,非空 @@ -188,23 +179,16 @@ public enum Week { // issue#3637 if (StrUtil.startWithAny(name, "星期", "周")) { final char chineseNumber = name.charAt(name.length() - 1); - switch (chineseNumber) { - case '一': - return MONDAY; - case '二': - return TUESDAY; - case '三': - return WEDNESDAY; - case '四': - return THURSDAY; - case '五': - return FRIDAY; - case '六': - return SATURDAY; - case '日': - return SUNDAY; - } - throw new IllegalArgumentException("Invalid week name: " + name); + return switch (chineseNumber) { + case '一' -> MONDAY; + case '二' -> TUESDAY; + case '三' -> WEDNESDAY; + case '四' -> THURSDAY; + case '五' -> FRIDAY; + case '六' -> SATURDAY; + case '日' -> SUNDAY; + default -> throw new IllegalArgumentException("Invalid week name: " + name); + }; } switch (Character.toLowerCase(name.charAt(0))) { diff --git a/hutool-core/src/main/java/cn/hutool/v7/core/date/chinese/ChineseDate.java b/hutool-core/src/main/java/cn/hutool/v7/core/date/chinese/ChineseDate.java index 26fadc5f6..b1319652c 100644 --- a/hutool-core/src/main/java/cn/hutool/v7/core/date/chinese/ChineseDate.java +++ b/hutool-core/src/main/java/cn/hutool/v7/core/date/chinese/ChineseDate.java @@ -304,16 +304,12 @@ public class ChineseDate { if (day > 30) { return ""; } - switch (day) { - case 10: - return "初十"; - case 20: - return "二十"; - case 30: - return "三十"; - default: - return chineseTen[day / 10] + ChineseNumberFormatter.of().format(n + 1); - } + return switch (day) { + case 10 -> "初十"; + case 20 -> "二十"; + case 30 -> "三十"; + default -> chineseTen[day / 10] + ChineseNumberFormatter.of().format(n + 1); + }; } /** diff --git a/hutool-core/src/main/java/cn/hutool/v7/core/date/format/FastDateFormat.java b/hutool-core/src/main/java/cn/hutool/v7/core/date/format/FastDateFormat.java index 68eb85013..2a2f96572 100644 --- a/hutool-core/src/main/java/cn/hutool/v7/core/date/format/FastDateFormat.java +++ b/hutool-core/src/main/java/cn/hutool/v7/core/date/format/FastDateFormat.java @@ -436,10 +436,9 @@ public class FastDateFormat extends Format implements PositionDateParser, DatePr // ----------------------------------------------------------------------- @Override public boolean equals(final Object obj) { - if (obj instanceof FastDateFormat == false) { + if (!(obj instanceof FastDateFormat other)) { return false; } - final FastDateFormat other = (FastDateFormat) obj; // no need to check parser, as it has same invariants as printer return printer.equals(other.printer); } diff --git a/hutool-core/src/main/java/cn/hutool/v7/core/date/format/SimpleDateBasic.java b/hutool-core/src/main/java/cn/hutool/v7/core/date/format/SimpleDateBasic.java index e4b12c75e..bcbbcaf18 100644 --- a/hutool-core/src/main/java/cn/hutool/v7/core/date/format/SimpleDateBasic.java +++ b/hutool-core/src/main/java/cn/hutool/v7/core/date/format/SimpleDateBasic.java @@ -75,10 +75,9 @@ public class SimpleDateBasic implements DateBasic, Serializable { // ----------------------------------------------------------------------- Basics @Override public boolean equals(final Object obj) { - if (obj instanceof FastDatePrinter == false) { + if (!(obj instanceof FastDatePrinter other)) { return false; } - final SimpleDateBasic other = (SimpleDateBasic) obj; return pattern.equals(other.pattern) && timeZone.equals(other.timeZone) && locale.equals(other.locale); } diff --git a/hutool-core/src/main/java/cn/hutool/v7/core/lang/ConsoleTable.java b/hutool-core/src/main/java/cn/hutool/v7/core/lang/ConsoleTable.java index ae422e6ec..8e90b5c7f 100644 --- a/hutool-core/src/main/java/cn/hutool/v7/core/lang/ConsoleTable.java +++ b/hutool-core/src/main/java/cn/hutool/v7/core/lang/ConsoleTable.java @@ -176,9 +176,7 @@ public class ConsoleTable { } sb.append(SPACE); final int maxLength = columnCharNumber.get(i); - for (int j = 0; j < (maxLength - length + (sbcCount / 2)); j++) { - sb.append(SPACE); - } + sb.append(String.valueOf(SPACE).repeat(Math.max(0, (maxLength - length + (sbcCount / 2))))); sb.append(COLUMN_LINE); } } diff --git a/hutool-core/src/main/java/cn/hutool/v7/core/lang/ref/ReferenceUtil.java b/hutool-core/src/main/java/cn/hutool/v7/core/lang/ref/ReferenceUtil.java index 5fffe83f6..3c8e6b5b2 100644 --- a/hutool-core/src/main/java/cn/hutool/v7/core/lang/ref/ReferenceUtil.java +++ b/hutool-core/src/main/java/cn/hutool/v7/core/lang/ref/ReferenceUtil.java @@ -60,16 +60,12 @@ public class ReferenceUtil { * @return {@link Reference} */ public static Reference of(final ReferenceType type, final T referent, final ReferenceQueue queue) { - switch (type) { - case SOFT: - return new SoftReference<>(referent, queue); - case WEAK: - return new WeakReference<>(referent, queue); - case PHANTOM: - return new PhantomReference<>(referent, queue); - default: - return null; - } + return switch (type) { + case SOFT -> new SoftReference<>(referent, queue); + case WEAK -> new WeakReference<>(referent, queue); + case PHANTOM -> new PhantomReference<>(referent, queue); + default -> null; + }; } /** diff --git a/hutool-core/src/main/java/cn/hutool/v7/core/lang/tuple/Tuple.java b/hutool-core/src/main/java/cn/hutool/v7/core/lang/tuple/Tuple.java index 3ec98eb76..7fecf5444 100644 --- a/hutool-core/src/main/java/cn/hutool/v7/core/lang/tuple/Tuple.java +++ b/hutool-core/src/main/java/cn/hutool/v7/core/lang/tuple/Tuple.java @@ -197,7 +197,7 @@ public class Tuple implements Iterable, Serializable, Cloneable { return false; } final Tuple other = (Tuple) obj; - return false != Arrays.deepEquals(members, other.members); + return Arrays.deepEquals(members, other.members); } @Override diff --git a/hutool-core/src/main/java/cn/hutool/v7/core/math/Calculator.java b/hutool-core/src/main/java/cn/hutool/v7/core/math/Calculator.java index 14fccb585..9724006aa 100644 --- a/hutool-core/src/main/java/cn/hutool/v7/core/math/Calculator.java +++ b/hutool-core/src/main/java/cn/hutool/v7/core/math/Calculator.java @@ -165,26 +165,14 @@ public class Calculator { * @return 结果 */ private BigDecimal calculate(final String firstValue, final String secondValue, final char currentOp) { - final BigDecimal result; - switch (currentOp) { - case '+': - result = NumberUtil.add(firstValue, secondValue); - break; - case '-': - result = NumberUtil.sub(firstValue, secondValue); - break; - case '*': - result = NumberUtil.mul(firstValue, secondValue); - break; - case '/': - result = NumberUtil.div(firstValue, secondValue); - break; - case '%': - result = NumberUtil.toBigDecimal(firstValue).remainder(NumberUtil.toBigDecimal(secondValue)); - break; - default: - throw new IllegalStateException("Unexpected value: " + currentOp); - } + final BigDecimal result = switch (currentOp) { + case '+' -> NumberUtil.add(firstValue, secondValue); + case '-' -> NumberUtil.sub(firstValue, secondValue); + case '*' -> NumberUtil.mul(firstValue, secondValue); + case '/' -> NumberUtil.div(firstValue, secondValue); + case '%' -> NumberUtil.toBigDecimal(firstValue).remainder(NumberUtil.toBigDecimal(secondValue)); + default -> throw new IllegalStateException("Unexpected value: " + currentOp); + }; return result; } diff --git a/hutool-core/src/main/java/cn/hutool/v7/core/math/ChineseNumberFormatter.java b/hutool-core/src/main/java/cn/hutool/v7/core/math/ChineseNumberFormatter.java index e633806ff..aac2a4c59 100644 --- a/hutool-core/src/main/java/cn/hutool/v7/core/math/ChineseNumberFormatter.java +++ b/hutool-core/src/main/java/cn/hutool/v7/core/math/ChineseNumberFormatter.java @@ -147,7 +147,6 @@ public class ChineseNumberFormatter { */ public ChineseNumberFormatter setUnitName(final String unitName) { this.unitName = Assert.notNull(unitName); - ; return this; } // endregion diff --git a/hutool-core/src/main/java/cn/hutool/v7/core/math/RomanNumberFormatter.java b/hutool-core/src/main/java/cn/hutool/v7/core/math/RomanNumberFormatter.java index b043bda22..43a87f2cc 100644 --- a/hutool-core/src/main/java/cn/hutool/v7/core/math/RomanNumberFormatter.java +++ b/hutool-core/src/main/java/cn/hutool/v7/core/math/RomanNumberFormatter.java @@ -76,31 +76,16 @@ public class RomanNumberFormatter { final char[] charArray = roman.toCharArray(); for (int i = charArray.length - 1; i >= 0; i--) { final char c = charArray[i]; - switch (c) { - case 'I': - currValue = 1; - break; - case 'V': - currValue = 5; - break; - case 'X': - currValue = 10; - break; - case 'L': - currValue = 50; - break; - case 'C': - currValue = 100; - break; - case 'D': - currValue = 500; - break; - case 'M': - currValue = 1000; - break; - default: - throw new IllegalArgumentException("Invalid Roman character: " + c); - } + currValue = switch (c) { + case 'I' -> 1; + case 'V' -> 5; + case 'X' -> 10; + case 'L' -> 50; + case 'C' -> 100; + case 'D' -> 500; + case 'M' -> 1000; + default -> throw new IllegalArgumentException("Invalid Roman character: " + c); + }; if (currValue < prevValue) { result -= currValue; } else { diff --git a/hutool-core/src/main/java/cn/hutool/v7/core/net/Ipv4Util.java b/hutool-core/src/main/java/cn/hutool/v7/core/net/Ipv4Util.java index 52ec71c98..4f07a1184 100644 --- a/hutool-core/src/main/java/cn/hutool/v7/core/net/Ipv4Util.java +++ b/hutool-core/src/main/java/cn/hutool/v7/core/net/Ipv4Util.java @@ -109,7 +109,7 @@ public class Ipv4Util implements Ipv4Pool { *

* 此方法不会抛出异常,获取失败将返回{@code null}
*

- * 见:https://github.com/chinabugotech/hutool/issues/428 + * 见:issues#428 * * @return 本机网卡IP地址,获取失败返回{@code null} */ @@ -129,7 +129,7 @@ public class Ipv4Util implements Ipv4Pool { *

* 此方法不会抛出异常,获取失败将返回{@code null}
*

- * 见:https://github.com/chinabugotech/hutool/issues/428 + * 见:issues#428 * * @return 本机网卡IP地址,获取失败返回{@code null} */ @@ -149,7 +149,7 @@ public class Ipv4Util implements Ipv4Pool { *

* 此方法不会抛出异常,获取失败将返回{@code null}
*

- * 见:https://github.com/chinabugotech/hutool/issues/428 + * 见:issues#428 * * @param includeSiteLocal 是否包含局域网地址,如10.0.0.0 ~ 10.255.255.255、172.16.0.0 ~ 172.31.255.255、192.168.0.0 ~ 192.168.255.255 * @return 本机网卡IP地址,获取失败返回{@code null} @@ -580,18 +580,13 @@ public class Ipv4Util implements Ipv4Pool { * @since 6.0.0 */ public static int getPartOfIp(final long ip, final int position) { - switch (position) { - case 1: - return (int) (ip >> 24) & 0xFF; - case 2: - return (int) (ip >> 16) & 0xFF; - case 3: - return (int) (ip >> 8) & 0xFF; - case 4: - return (int) ip & 0xFF; - default: - throw new IllegalArgumentException("Illegal position of ip Long: " + position); - } + return switch (position) { + case 1 -> (int) (ip >> 24) & 0xFF; + case 2 -> (int) (ip >> 16) & 0xFF; + case 3 -> (int) (ip >> 8) & 0xFF; + case 4 -> (int) ip & 0xFF; + default -> throw new IllegalArgumentException("Illegal position of ip Long: " + position); + }; } /** diff --git a/hutool-core/src/main/java/cn/hutool/v7/core/net/url/UrlQuery.java b/hutool-core/src/main/java/cn/hutool/v7/core/net/url/UrlQuery.java index 7a6cbadae..4992094c7 100644 --- a/hutool-core/src/main/java/cn/hutool/v7/core/net/url/UrlQuery.java +++ b/hutool-core/src/main/java/cn/hutool/v7/core/net/url/UrlQuery.java @@ -270,14 +270,11 @@ public class UrlQuery { * @return URL查询字符串 */ public String build(final Charset charset) { - switch (this.encodeMode) { - case FORM_URL_ENCODED: - return build(FormUrlencoded.ALL, FormUrlencoded.ALL, charset); - case STRICT: - return build(RFC3986.QUERY_PARAM_NAME_STRICT, RFC3986.QUERY_PARAM_VALUE_STRICT, charset); - default: - return build(RFC3986.QUERY_PARAM_NAME, RFC3986.QUERY_PARAM_VALUE, charset); - } + return switch (this.encodeMode) { + case FORM_URL_ENCODED -> build(FormUrlencoded.ALL, FormUrlencoded.ALL, charset); + case STRICT -> build(RFC3986.QUERY_PARAM_NAME_STRICT, RFC3986.QUERY_PARAM_VALUE_STRICT, charset); + default -> build(RFC3986.QUERY_PARAM_NAME, RFC3986.QUERY_PARAM_VALUE, charset); + }; } /** @@ -306,7 +303,7 @@ public class UrlQuery { for (final Map.Entry entry : this.query) { name = entry.getKey(); if (null != name) { - if (sb.length() > 0) { + if (!sb.isEmpty()) { sb.append("&"); } sb.append(keyCoder.encode(name, charset)); @@ -332,7 +329,7 @@ public class UrlQuery { /** * 解析URL中的查询字符串
- * 规则见:https://url.spec.whatwg.org/#urlencoded-parsing + * 规则见:urlencoded-parsing * * @param queryStr 查询字符串,类似于key1=v1&key2=&key3=v3 * @param charset decode编码,null表示不做decode diff --git a/hutool-core/src/main/java/cn/hutool/v7/core/reflect/method/MethodUtil.java b/hutool-core/src/main/java/cn/hutool/v7/core/reflect/method/MethodUtil.java index f5d84944a..268145075 100644 --- a/hutool-core/src/main/java/cn/hutool/v7/core/reflect/method/MethodUtil.java +++ b/hutool-core/src/main/java/cn/hutool/v7/core/reflect/method/MethodUtil.java @@ -452,14 +452,11 @@ public class MethodUtil { public static boolean isGetterOrSetter(final Method method, final boolean ignoreCase) { // 参数个数必须为1 final int parameterCount = method.getParameterCount(); - switch (parameterCount) { - case 0: - return isGetter(method, ignoreCase); - case 1: - return isSetter(method, ignoreCase); - default: - return false; - } + return switch (parameterCount) { + case 0 -> isGetter(method, ignoreCase); + case 1 -> isSetter(method, ignoreCase); + default -> false; + }; } /** diff --git a/hutool-core/src/main/java/cn/hutool/v7/core/text/CharUtil.java b/hutool-core/src/main/java/cn/hutool/v7/core/text/CharUtil.java index f3d4ca39e..1f80d7a7d 100644 --- a/hutool-core/src/main/java/cn/hutool/v7/core/text/CharUtil.java +++ b/hutool-core/src/main/java/cn/hutool/v7/core/text/CharUtil.java @@ -321,19 +321,17 @@ public class CharUtil implements CharPool { * @return 是否为零宽字符 */ public static boolean isZeroWidthChar(final char c) { - switch (c) { - case '\u200B': // 零宽空格 - case '\u200C': // 零宽非换行空格 - case '\u200D': // 零宽连接符 - case '\uFEFF': // 零宽无断空格 - case '\u2060': // 零宽连字符 - case '\u2063': // 零宽不连字符 - case '\u2064': // 零宽连字符 - case '\u2065': // 零宽不连字符 - return true; - default: - return false; - } + return switch (c) { // 零宽空格 + // 零宽非换行空格 + // 零宽连接符 + // 零宽无断空格 + // 零宽连字符 + // 零宽不连字符 + // 零宽连字符 + case '\u200B', '\u200C', '\u200D', '\uFEFF', '\u2060', '\u2063', '\u2064', '\u2065' -> // 零宽不连字符 + true; + default -> false; + }; } /** diff --git a/hutool-core/src/main/java/cn/hutool/v7/core/text/StrJoiner.java b/hutool-core/src/main/java/cn/hutool/v7/core/text/StrJoiner.java index 364fe75fb..ef564684b 100644 --- a/hutool-core/src/main/java/cn/hutool/v7/core/text/StrJoiner.java +++ b/hutool-core/src/main/java/cn/hutool/v7/core/text/StrJoiner.java @@ -16,11 +16,11 @@ package cn.hutool.v7.core.text; +import cn.hutool.v7.core.array.ArrayUtil; import cn.hutool.v7.core.collection.iter.ArrayIter; import cn.hutool.v7.core.collection.iter.IterUtil; import cn.hutool.v7.core.convert.ConvertUtil; import cn.hutool.v7.core.io.IORuntimeException; -import cn.hutool.v7.core.array.ArrayUtil; import java.io.IOException; import java.io.Serial; @@ -236,8 +236,7 @@ public class StrJoiner implements Appendable, Serializable { append((Iterator) obj); } else if (obj instanceof Iterable) { append(((Iterable) obj).iterator()); - }else if (obj instanceof Map.Entry) { - final Map.Entry entry = (Map.Entry) obj; + }else if (obj instanceof Map.Entry entry) { append(entry.getKey()).append(entry.getValue()); } else { append(ConvertUtil.toStr(obj)); @@ -449,9 +448,8 @@ public class StrJoiner implements Appendable, Serializable { * @param appendable {@link Appendable} */ private void checkHasContent(final Appendable appendable) { - if (appendable instanceof CharSequence) { - final CharSequence charSequence = (CharSequence) appendable; - if (charSequence.length() > 0 && StrUtil.endWith(charSequence, delimiter)) { + if (appendable instanceof CharSequence charSequence) { + if (!charSequence.isEmpty() && StrUtil.endWith(charSequence, delimiter)) { this.hasContent = true; } } else { diff --git a/hutool-core/src/main/java/cn/hutool/v7/core/text/StrRepeater.java b/hutool-core/src/main/java/cn/hutool/v7/core/text/StrRepeater.java index 13edf1683..a69c26c09 100644 --- a/hutool-core/src/main/java/cn/hutool/v7/core/text/StrRepeater.java +++ b/hutool-core/src/main/java/cn/hutool/v7/core/text/StrRepeater.java @@ -82,7 +82,7 @@ public class StrRepeater { } final int count = this.countOrLength; - if (count <= 0 || str.length() == 0) { + if (count <= 0 || str.isEmpty()) { return StrUtil.EMPTY; } if (count == 1) { diff --git a/hutool-core/src/main/java/cn/hutool/v7/core/text/StrValidator.java b/hutool-core/src/main/java/cn/hutool/v7/core/text/StrValidator.java index 2f163813c..24a4ae75f 100644 --- a/hutool-core/src/main/java/cn/hutool/v7/core/text/StrValidator.java +++ b/hutool-core/src/main/java/cn/hutool/v7/core/text/StrValidator.java @@ -157,7 +157,7 @@ public class StrValidator { * @see #isBlank(CharSequence) */ public static boolean isEmpty(final CharSequence str) { - return str == null || str.length() == 0; + return str == null || str.isEmpty(); } /** diff --git a/hutool-core/src/main/java/cn/hutool/v7/core/text/dfa/SensitiveProcessor.java b/hutool-core/src/main/java/cn/hutool/v7/core/text/dfa/SensitiveProcessor.java index 0b9eb97ae..250ffbe62 100644 --- a/hutool-core/src/main/java/cn/hutool/v7/core/text/dfa/SensitiveProcessor.java +++ b/hutool-core/src/main/java/cn/hutool/v7/core/text/dfa/SensitiveProcessor.java @@ -29,10 +29,6 @@ public interface SensitiveProcessor { */ default String process(final FoundWord foundWord) { final int length = foundWord.getFoundWord().length(); - final StringBuilder sb = new StringBuilder(length); - for (int i = 0; i < length; i++) { - sb.append("*"); - } - return sb.toString(); + return "*".repeat(length); } } diff --git a/hutool-core/src/main/java/cn/hutool/v7/core/text/placeholder/StrMatcher.java b/hutool-core/src/main/java/cn/hutool/v7/core/text/placeholder/StrMatcher.java index 6710da4f2..11316ecdb 100644 --- a/hutool-core/src/main/java/cn/hutool/v7/core/text/placeholder/StrMatcher.java +++ b/hutool-core/src/main/java/cn/hutool/v7/core/text/placeholder/StrMatcher.java @@ -127,7 +127,7 @@ public class StrMatcher { } } - if (part.length() > 0) { + if (!part.isEmpty()) { patterns.add(part.toString()); } return patterns; diff --git a/hutool-core/src/main/java/cn/hutool/v7/core/text/split/SplitUtil.java b/hutool-core/src/main/java/cn/hutool/v7/core/text/split/SplitUtil.java index ac7793df5..2e7cb4fe0 100644 --- a/hutool-core/src/main/java/cn/hutool/v7/core/text/split/SplitUtil.java +++ b/hutool-core/src/main/java/cn/hutool/v7/core/text/split/SplitUtil.java @@ -167,7 +167,7 @@ public class SplitUtil { final Function mapping) { if (null == str) { return ListUtil.zero(); - } else if (0 == str.length() && ignoreEmpty) { + } else if (str.isEmpty() && ignoreEmpty) { return ListUtil.zero(); } Assert.notEmpty(separator, "Separator must be not empty!"); @@ -304,7 +304,7 @@ public class SplitUtil { if (null == str) { return ListUtil.zero(); } - if(0 == str.length()){ + if(str.isEmpty()){ return ignoreEmpty ? ListUtil.zero() : ListUtil.of(StrUtil.EMPTY); } if(null == separatorPattern){ diff --git a/hutool-core/src/main/java/cn/hutool/v7/core/util/RuntimeUtil.java b/hutool-core/src/main/java/cn/hutool/v7/core/util/RuntimeUtil.java index e5a750f87..8411e8ea9 100644 --- a/hutool-core/src/main/java/cn/hutool/v7/core/util/RuntimeUtil.java +++ b/hutool-core/src/main/java/cn/hutool/v7/core/util/RuntimeUtil.java @@ -391,7 +391,7 @@ public class RuntimeUtil { } } - if (cache.length() > 0) { + if (!cache.isEmpty()) { cmds.add(cache.toString()); } diff --git a/hutool-core/src/test/java/cn/hutool/v7/core/bean/DynaBeanTest.java b/hutool-core/src/test/java/cn/hutool/v7/core/bean/DynaBeanTest.java index 462cfefd9..290d441e1 100644 --- a/hutool-core/src/test/java/cn/hutool/v7/core/bean/DynaBeanTest.java +++ b/hutool-core/src/test/java/cn/hutool/v7/core/bean/DynaBeanTest.java @@ -21,7 +21,6 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; -import static org.junit.jupiter.api.Assertions.assertEquals; /** * {@link DynaBean}单元测试 diff --git a/hutool-core/src/test/java/cn/hutool/v7/core/bean/ProxyBeanTest.java b/hutool-core/src/test/java/cn/hutool/v7/core/bean/ProxyBeanTest.java index 65271eadb..db61d7455 100644 --- a/hutool-core/src/test/java/cn/hutool/v7/core/bean/ProxyBeanTest.java +++ b/hutool-core/src/test/java/cn/hutool/v7/core/bean/ProxyBeanTest.java @@ -48,16 +48,12 @@ public class ProxyBeanTest { void proxyTest() { final IBean bean = JdkProxyUtil.newProxyInstance((proxy, method, args) -> { final String name = method.getName(); - switch (name){ - case "getName": - return "hutool"; - case "setName": - case "setAge": - return null; - case "getAge": - return 1; - } - throw new HutoolException("No method name: " + name); + return switch (name) { + case "getName" -> "hutool"; + case "setName", "setAge" -> null; + case "getAge" -> 1; + default -> throw new HutoolException("No method name: " + name); + }; }, IBean.class); // 测试代理类的Bean拷贝 diff --git a/hutool-core/src/test/java/cn/hutool/v7/core/cache/CacheConcurrentTest.java b/hutool-core/src/test/java/cn/hutool/v7/core/cache/CacheConcurrentTest.java index 9b916a50e..d8fc25d49 100644 --- a/hutool-core/src/test/java/cn/hutool/v7/core/cache/CacheConcurrentTest.java +++ b/hutool-core/src/test/java/cn/hutool/v7/core/cache/CacheConcurrentTest.java @@ -20,7 +20,6 @@ import cn.hutool.v7.core.cache.impl.FIFOCache; import cn.hutool.v7.core.cache.impl.LRUCache; import cn.hutool.v7.core.cache.impl.WeakCache; import cn.hutool.v7.core.exception.HutoolException; -import cn.hutool.v7.core.func.SerSupplier; import cn.hutool.v7.core.lang.Console; import cn.hutool.v7.core.thread.ConcurrencyTester; import cn.hutool.v7.core.thread.ThreadUtil; @@ -29,8 +28,6 @@ import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import java.util.concurrent.CountDownLatch; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; diff --git a/hutool-core/src/test/java/cn/hutool/v7/core/collection/PartitionIterTest.java b/hutool-core/src/test/java/cn/hutool/v7/core/collection/PartitionIterTest.java index 3debd4bc6..20b5a2422 100644 --- a/hutool-core/src/test/java/cn/hutool/v7/core/collection/PartitionIterTest.java +++ b/hutool-core/src/test/java/cn/hutool/v7/core/collection/PartitionIterTest.java @@ -32,7 +32,7 @@ public class PartitionIterTest { final LineIter lineIter = new LineIter(ResourceUtil.getUtf8Reader("test_lines.csv")); final PartitionIter iter = new PartitionIter<>(lineIter, 3); for (final List lines : iter) { - Assertions.assertTrue(lines.size() > 0); + Assertions.assertFalse(lines.isEmpty()); } } diff --git a/hutool-core/src/test/java/cn/hutool/v7/core/convert/EnumConvertTest.java b/hutool-core/src/test/java/cn/hutool/v7/core/convert/EnumConvertTest.java index b01bf60c0..a05cddeeb 100644 --- a/hutool-core/src/test/java/cn/hutool/v7/core/convert/EnumConvertTest.java +++ b/hutool-core/src/test/java/cn/hutool/v7/core/convert/EnumConvertTest.java @@ -46,27 +46,21 @@ public class EnumConvertTest { A, B, C; public static TestEnum parse(final String str) { - switch (str) { - case "AAA": - return A; - case "BBB": - return B; - case "CCC": - return C; - } - return null; + return switch (str) { + case "AAA" -> A; + case "BBB" -> B; + case "CCC" -> C; + default -> null; + }; } public static TestEnum parseByNumber(final int i) { - switch (i) { - case 11: - return A; - case 22: - return B; - case 33: - return C; - } - return null; + return switch (i) { + case 11 -> A; + case 22 -> B; + case 33 -> C; + default -> null; + }; } } } diff --git a/hutool-core/src/test/java/cn/hutool/v7/core/data/id/NanoIdTest.java b/hutool-core/src/test/java/cn/hutool/v7/core/data/id/NanoIdTest.java index 8f3d08ecb..13c177bd6 100644 --- a/hutool-core/src/test/java/cn/hutool/v7/core/data/id/NanoIdTest.java +++ b/hutool-core/src/test/java/cn/hutool/v7/core/data/id/NanoIdTest.java @@ -16,16 +16,11 @@ package cn.hutool.v7.core.data.id; -import cn.hutool.v7.core.data.id.NanoId; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import java.security.SecureRandom; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Random; -import java.util.Set; +import java.util.*; import java.util.regex.Pattern; /** @@ -45,7 +40,7 @@ public class NanoIdTest { for (int i = 0; i < idCount; i++) { final String id = NanoId.randomNanoId(); - if (ids.contains(id) == false) { + if (!ids.contains(id)) { ids.add(id); } else { Assertions.fail("Non-unique ID generated: " + id); diff --git a/hutool-core/src/test/java/cn/hutool/v7/core/date/BetweenFormatterTest.java b/hutool-core/src/test/java/cn/hutool/v7/core/date/BetweenFormatterTest.java index 31e5025b8..8f6ef5ae8 100644 --- a/hutool-core/src/test/java/cn/hutool/v7/core/date/BetweenFormatterTest.java +++ b/hutool-core/src/test/java/cn/hutool/v7/core/date/BetweenFormatterTest.java @@ -24,20 +24,14 @@ import java.util.function.Function; public class BetweenFormatterTest { Function levelFormatterEn = level -> { - switch (level) { - case DAY: - return " day"; - case HOUR: - return " hour"; - case MINUTE: - return " minute"; - case SECOND: - return " second"; - case MILLISECOND: - return " millisecond"; - default: - return " " + level.name(); - } + return switch (level) { + case DAY -> " day"; + case HOUR -> " hour"; + case MINUTE -> " minute"; + case SECOND -> " second"; + case MILLISECOND -> " millisecond"; + default -> " " + level.name(); + }; }; @Test diff --git a/hutool-core/src/test/java/cn/hutool/v7/core/lang/SingletonTest.java b/hutool-core/src/test/java/cn/hutool/v7/core/lang/SingletonTest.java index 157a7dc2a..1370d2721 100644 --- a/hutool-core/src/test/java/cn/hutool/v7/core/lang/SingletonTest.java +++ b/hutool-core/src/test/java/cn/hutool/v7/core/lang/SingletonTest.java @@ -16,14 +16,12 @@ package cn.hutool.v7.core.lang; -import lombok.Data; import cn.hutool.v7.core.exception.HutoolException; import cn.hutool.v7.core.thread.ThreadUtil; +import lombok.Data; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.condition.DisabledOnJre; -import org.junit.jupiter.api.condition.JRE; import java.time.Duration; import java.util.concurrent.LinkedBlockingQueue; diff --git a/hutool-core/src/test/java/cn/hutool/v7/core/map/DirectedWeightGraphTest.java b/hutool-core/src/test/java/cn/hutool/v7/core/map/DirectedWeightGraphTest.java index b641c3e94..4733e5d44 100644 --- a/hutool-core/src/test/java/cn/hutool/v7/core/map/DirectedWeightGraphTest.java +++ b/hutool-core/src/test/java/cn/hutool/v7/core/map/DirectedWeightGraphTest.java @@ -21,8 +21,6 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; -import java.util.Map; - /** * @author newshiJ */ diff --git a/hutool-core/src/test/java/cn/hutool/v7/core/net/UrlDecoderTest.java b/hutool-core/src/test/java/cn/hutool/v7/core/net/UrlDecoderTest.java index 85865b295..02569ad7c 100644 --- a/hutool-core/src/test/java/cn/hutool/v7/core/net/UrlDecoderTest.java +++ b/hutool-core/src/test/java/cn/hutool/v7/core/net/UrlDecoderTest.java @@ -47,7 +47,7 @@ class UrlDecoderTest { final String s1 = UrlEncoder.encodeAll(s, StandardCharsets.UTF_16); Assertions.assertEquals(expectedDecode, s1); - final String s2 = java.net.URLEncoder.encode(s, "UTF-16"); + final String s2 = java.net.URLEncoder.encode(s, StandardCharsets.UTF_16); Assertions.assertEquals(expectedDecode, s2); final String decode = UrlDecoder.decode(s1, StandardCharsets.UTF_16); @@ -59,7 +59,7 @@ class UrlDecoderTest { Assertions.assertEquals("测试你好", decode2); Assertions.assertEquals( - java.net.URLDecoder.decode(mixDecoded, "UTF-16"), + java.net.URLDecoder.decode(mixDecoded, StandardCharsets.UTF_16), UrlDecoder.decode(mixDecoded, StandardCharsets.UTF_16) ); } diff --git a/hutool-core/src/test/java/cn/hutool/v7/core/util/IdUtilTest.java b/hutool-core/src/test/java/cn/hutool/v7/core/util/IdUtilTest.java index 310900790..aa4c9e3f2 100644 --- a/hutool-core/src/test/java/cn/hutool/v7/core/util/IdUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/v7/core/util/IdUtilTest.java @@ -24,7 +24,6 @@ import cn.hutool.v7.core.date.StopWatch; import cn.hutool.v7.core.exception.HutoolException; import cn.hutool.v7.core.lang.Console; import cn.hutool.v7.core.thread.ThreadUtil; -import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.RepeatedTest; import org.junit.jupiter.api.Test; diff --git a/hutool-core/src/test/java/cn/hutool/v7/core/util/JdkUtilTest.java b/hutool-core/src/test/java/cn/hutool/v7/core/util/JdkUtilTest.java index 85179ccea..aaf2f8030 100644 --- a/hutool-core/src/test/java/cn/hutool/v7/core/util/JdkUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/v7/core/util/JdkUtilTest.java @@ -18,7 +18,6 @@ package cn.hutool.v7.core.util; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; public class JdkUtilTest { diff --git a/hutool-cron/src/main/java/cn/hutool/v7/cron/TaskExecutor.java b/hutool-cron/src/main/java/cn/hutool/v7/cron/TaskExecutor.java index 465989b45..33e94a0f0 100644 --- a/hutool-cron/src/main/java/cn/hutool/v7/cron/TaskExecutor.java +++ b/hutool-cron/src/main/java/cn/hutool/v7/cron/TaskExecutor.java @@ -17,7 +17,6 @@ package cn.hutool.v7.cron; import cn.hutool.v7.cron.task.CronTask; -import cn.hutool.v7.cron.task.Task; /** * 作业执行器
diff --git a/hutool-cron/src/test/java/cn/hutool/v7/cron/pattern/CronPatternNextMatchTest.java b/hutool-cron/src/test/java/cn/hutool/v7/cron/pattern/CronPatternNextMatchTest.java index 3ec2710fb..a4d84da9e 100644 --- a/hutool-cron/src/test/java/cn/hutool/v7/cron/pattern/CronPatternNextMatchTest.java +++ b/hutool-cron/src/test/java/cn/hutool/v7/cron/pattern/CronPatternNextMatchTest.java @@ -19,7 +19,6 @@ package cn.hutool.v7.cron.pattern; import cn.hutool.v7.core.date.DateField; import cn.hutool.v7.core.date.DateTime; import cn.hutool.v7.core.date.DateUtil; -import cn.hutool.v7.core.lang.Console; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; diff --git a/hutool-crypto/src/main/java/cn/hutool/v7/crypto/asymmetric/SM2.java b/hutool-crypto/src/main/java/cn/hutool/v7/crypto/asymmetric/SM2.java index a516a02a4..7b9837653 100644 --- a/hutool-crypto/src/main/java/cn/hutool/v7/crypto/asymmetric/SM2.java +++ b/hutool-crypto/src/main/java/cn/hutool/v7/crypto/asymmetric/SM2.java @@ -781,16 +781,18 @@ public class SM2 extends AbstractAsymmetricCrypto { * @return {@link CipherParameters} */ private CipherParameters getCipherParameters(final KeyType keyType) { - switch (keyType) { - case PublicKey: + return switch (keyType) { + case PublicKey -> { Assert.notNull(this.publicKeyParams, "PublicKey must be not null !"); - return this.publicKeyParams; - case PrivateKey: + yield this.publicKeyParams; + } + case PrivateKey -> { Assert.notNull(this.privateKeyParams, "PrivateKey must be not null !"); - return this.privateKeyParams; - } + yield this.privateKeyParams; + } + default -> null; + }; - return null; } /** diff --git a/hutool-crypto/src/main/java/cn/hutool/v7/crypto/asymmetric/Sign.java b/hutool-crypto/src/main/java/cn/hutool/v7/crypto/asymmetric/Sign.java index 64445ee2e..66f7a2478 100644 --- a/hutool-crypto/src/main/java/cn/hutool/v7/crypto/asymmetric/Sign.java +++ b/hutool-crypto/src/main/java/cn/hutool/v7/crypto/asymmetric/Sign.java @@ -221,7 +221,7 @@ public class Sign extends BaseAsymmetric { if (CollUtil.isNotEmpty(critSet) && critSet.contains("2.5.29.15")) { final boolean[] keyUsageInfo = cert.getKeyUsage(); // keyUsageInfo[0] is for digitalSignature. - if ((keyUsageInfo != null) && (keyUsageInfo[0] == false)) { + if ((keyUsageInfo != null) && (!keyUsageInfo[0])) { throw new CryptoException("Wrong key usage"); } } diff --git a/hutool-crypto/src/main/java/cn/hutool/v7/crypto/bc/ASN1Util.java b/hutool-crypto/src/main/java/cn/hutool/v7/crypto/bc/ASN1Util.java index 57132a735..971f42bed 100644 --- a/hutool-crypto/src/main/java/cn/hutool/v7/crypto/bc/ASN1Util.java +++ b/hutool-crypto/src/main/java/cn/hutool/v7/crypto/bc/ASN1Util.java @@ -69,20 +69,12 @@ public class ASN1Util { * @param elements ASN.1元素 */ public static void encodeTo(final String asn1Encoding, final OutputStream out, final ASN1Encodable... elements) { - final ASN1Sequence sequence; - switch (asn1Encoding) { - case ASN1Encoding.DER: - sequence = new DERSequence(elements); - break; - case ASN1Encoding.BER: - sequence = new BERSequence(elements); - break; - case ASN1Encoding.DL: - sequence = new DLSequence(elements); - break; - default: - throw new CryptoException("Unsupported ASN1 encoding: {}", asn1Encoding); - } + final ASN1Sequence sequence = switch (asn1Encoding) { + case ASN1Encoding.DER -> new DERSequence(elements); + case ASN1Encoding.BER -> new BERSequence(elements); + case ASN1Encoding.DL -> new DLSequence(elements); + default -> throw new CryptoException("Unsupported ASN1 encoding: {}", asn1Encoding); + }; try { sequence.encodeTo(out); } catch (final IOException e) { diff --git a/hutool-crypto/src/main/java/cn/hutool/v7/crypto/bc/BCUtil.java b/hutool-crypto/src/main/java/cn/hutool/v7/crypto/bc/BCUtil.java index b050e0f9b..0f725385a 100644 --- a/hutool-crypto/src/main/java/cn/hutool/v7/crypto/bc/BCUtil.java +++ b/hutool-crypto/src/main/java/cn/hutool/v7/crypto/bc/BCUtil.java @@ -146,17 +146,13 @@ public class BCUtil { return new CTSBlockCipher(cipher); } - switch (padding) { - case NoPadding: - return new DefaultBufferedBlockCipher(cipher); - case PKCS5Padding: - return new PaddedBufferedBlockCipher(cipher); - case ZeroPadding: - return new PaddedBufferedBlockCipher(cipher, new ZeroBytePadding()); - case ISO10126Padding: - return new PaddedBufferedBlockCipher(cipher, new ISO10126d2Padding()); - } + return switch (padding) { + case NoPadding -> new DefaultBufferedBlockCipher(cipher); + case PKCS5Padding -> new PaddedBufferedBlockCipher(cipher); + case ZeroPadding -> new PaddedBufferedBlockCipher(cipher, new ZeroBytePadding()); + case ISO10126Padding -> new PaddedBufferedBlockCipher(cipher, new ISO10126d2Padding()); + default -> null; + }; - return null; } } diff --git a/hutool-crypto/src/test/java/cn/hutool/v7/crypto/asymmetric/ECIESTest.java b/hutool-crypto/src/test/java/cn/hutool/v7/crypto/asymmetric/ECIESTest.java index b2bd23cc1..6cbd24e8e 100644 --- a/hutool-crypto/src/test/java/cn/hutool/v7/crypto/asymmetric/ECIESTest.java +++ b/hutool-crypto/src/test/java/cn/hutool/v7/crypto/asymmetric/ECIESTest.java @@ -56,9 +56,7 @@ public class ECIESTest { private void doTest(final AsymmetricCrypto cryptoForEncrypt, final AsymmetricCrypto cryptoForDecrypt){ final String textBase = "我是一段特别长的测试"; final StringBuilder text = new StringBuilder(); - for (int i = 0; i < 10; i++) { - text.append(textBase); - } + text.append(textBase.repeat(10)); // 公钥加密,私钥解密 final String encryptStr = cryptoForEncrypt.encryptBase64(text.toString(), KeyType.PublicKey); diff --git a/hutool-crypto/src/test/java/cn/hutool/v7/crypto/asymmetric/RSATest.java b/hutool-crypto/src/test/java/cn/hutool/v7/crypto/asymmetric/RSATest.java index e94919758..bdc8c96dc 100644 --- a/hutool-crypto/src/test/java/cn/hutool/v7/crypto/asymmetric/RSATest.java +++ b/hutool-crypto/src/test/java/cn/hutool/v7/crypto/asymmetric/RSATest.java @@ -161,9 +161,7 @@ public class RSATest { public void rsaBase64Test() { final String textBase = "我是一段特别长的测试"; final StringBuilder text = new StringBuilder(); - for (int i = 0; i < 10; i++) { - text.append(textBase); - } + text.append(textBase.repeat(10)); final RSA rsa = new RSA(); diff --git a/hutool-crypto/src/test/java/cn/hutool/v7/crypto/asymmetric/SM2Test.java b/hutool-crypto/src/test/java/cn/hutool/v7/crypto/asymmetric/SM2Test.java index 17277c62f..e51ba251f 100644 --- a/hutool-crypto/src/test/java/cn/hutool/v7/crypto/asymmetric/SM2Test.java +++ b/hutool-crypto/src/test/java/cn/hutool/v7/crypto/asymmetric/SM2Test.java @@ -100,9 +100,7 @@ public class SM2Test { public void sm2Base64Test() { final String textBase = "我是一段特别长的测试"; final StringBuilder text = new StringBuilder(); - for (int i = 0; i < 100; i++) { - text.append(textBase); - } + text.append(textBase.repeat(100)); SM2 sm2 = new SM2(); diff --git a/hutool-db/src/main/java/cn/hutool/v7/db/Session.java b/hutool-db/src/main/java/cn/hutool/v7/db/Session.java index ec4632f7f..cc6a0235b 100644 --- a/hutool-db/src/main/java/cn/hutool/v7/db/Session.java +++ b/hutool-db/src/main/java/cn/hutool/v7/db/Session.java @@ -246,7 +246,7 @@ public class Session extends AbstractDb implements Closeable { */ public void setTransactionIsolation(final int level) throws DbException { try { - if (getConnection().getMetaData().supportsTransactionIsolationLevel(level) == false) { + if (!getConnection().getMetaData().supportsTransactionIsolationLevel(level)) { throw new DbException(StrUtil.format("Transaction isolation [{}] not support!", level)); } getConnection().setTransactionIsolation(level); diff --git a/hutool-db/src/main/java/cn/hutool/v7/db/meta/ResultColumn.java b/hutool-db/src/main/java/cn/hutool/v7/db/meta/ResultColumn.java index 655ae06d5..098c5db63 100644 --- a/hutool-db/src/main/java/cn/hutool/v7/db/meta/ResultColumn.java +++ b/hutool-db/src/main/java/cn/hutool/v7/db/meta/ResultColumn.java @@ -296,14 +296,11 @@ public class ResultColumn { * @return ColumnNullable */ public static ColumnNullable of(final int nullable) { - switch (nullable) { - case ResultSetMetaData.columnNoNulls: - return NO_NULLS; - case ResultSetMetaData.columnNullable: - return NULLABLE; - default: - return UNKNOWN; - } + return switch (nullable) { + case ResultSetMetaData.columnNoNulls -> NO_NULLS; + case ResultSetMetaData.columnNullable -> NULLABLE; + default -> UNKNOWN; + }; } final int value; diff --git a/hutool-db/src/main/java/cn/hutool/v7/db/sql/SqlFormatter.java b/hutool-db/src/main/java/cn/hutool/v7/db/sql/SqlFormatter.java index ed6f9fe51..3ed36654d 100644 --- a/hutool-db/src/main/java/cn/hutool/v7/db/sql/SqlFormatter.java +++ b/hutool-db/src/main/java/cn/hutool/v7/db/sql/SqlFormatter.java @@ -357,9 +357,7 @@ public class SqlFormatter { private void newline() { this.result.append("\n"); - for (int i = 0; i < this.indent; i++) { - this.result.append(indentString); - } + this.result.append(indentString.repeat(Math.max(0, this.indent))); this.beginLine = true; } } diff --git a/hutool-db/src/test/java/cn/hutool/v7/db/sql/ConditionTest.java b/hutool-db/src/test/java/cn/hutool/v7/db/sql/ConditionTest.java index d15f9fb7a..03452e304 100644 --- a/hutool-db/src/test/java/cn/hutool/v7/db/sql/ConditionTest.java +++ b/hutool-db/src/test/java/cn/hutool/v7/db/sql/ConditionTest.java @@ -18,12 +18,10 @@ package cn.hutool.v7.db.sql; import cn.hutool.v7.core.date.DateTime; import cn.hutool.v7.core.date.DateUtil; -import cn.hutool.v7.core.lang.Console; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import java.math.BigDecimal; -import java.util.List; import static org.junit.jupiter.api.Assertions.assertEquals; diff --git a/hutool-extra/src/main/java/cn/hutool/v7/extra/compress/archiver/StreamArchiver.java b/hutool-extra/src/main/java/cn/hutool/v7/extra/compress/archiver/StreamArchiver.java index 5db5f0455..eea98bc5a 100644 --- a/hutool-extra/src/main/java/cn/hutool/v7/extra/compress/archiver/StreamArchiver.java +++ b/hutool-extra/src/main/java/cn/hutool/v7/extra/compress/archiver/StreamArchiver.java @@ -16,24 +16,21 @@ package cn.hutool.v7.extra.compress.archiver; +import cn.hutool.v7.core.array.ArrayUtil; +import cn.hutool.v7.core.io.IORuntimeException; +import cn.hutool.v7.core.io.IoUtil; +import cn.hutool.v7.core.io.file.FileUtil; import cn.hutool.v7.core.io.file.PathUtil; +import cn.hutool.v7.extra.compress.CompressException; import cn.hutool.v7.extra.compress.CompressUtil; import org.apache.commons.compress.archivers.ArchiveEntry; import org.apache.commons.compress.archivers.ArchiveException; import org.apache.commons.compress.archivers.ArchiveOutputStream; import org.apache.commons.compress.archivers.ArchiveStreamFactory; import org.apache.commons.compress.archivers.ar.ArArchiveOutputStream; -import org.apache.commons.compress.archivers.sevenz.SevenZOutputFile; import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream; import org.apache.commons.compress.compressors.gzip.GzipCompressorOutputStream; -import cn.hutool.v7.core.array.ArrayUtil; -import cn.hutool.v7.core.io.IORuntimeException; -import cn.hutool.v7.core.io.IoUtil; -import cn.hutool.v7.core.io.file.FileUtil; -import cn.hutool.v7.core.text.StrUtil; -import cn.hutool.v7.extra.compress.CompressException; -import java.io.BufferedInputStream; import java.io.File; import java.io.IOException; import java.io.OutputStream; diff --git a/hutool-extra/src/main/java/cn/hutool/v7/extra/pinyin/engine/PinyinEngine.java b/hutool-extra/src/main/java/cn/hutool/v7/extra/pinyin/engine/PinyinEngine.java index dd4ec7e5c..1f2ff4dbc 100644 --- a/hutool-extra/src/main/java/cn/hutool/v7/extra/pinyin/engine/PinyinEngine.java +++ b/hutool-extra/src/main/java/cn/hutool/v7/extra/pinyin/engine/PinyinEngine.java @@ -38,7 +38,7 @@ public interface PinyinEngine { */ default String getPinyin(final char c){ return getPinyin(c, false); - }; + } /** * 如果c为汉字,则返回大写拼音;如果c不是汉字,则返回String.valueOf(c) diff --git a/hutool-extra/src/main/java/cn/hutool/v7/extra/template/engine/beetl/BeetlEngine.java b/hutool-extra/src/main/java/cn/hutool/v7/extra/template/engine/beetl/BeetlEngine.java index 8582a15e6..b213d64c5 100644 --- a/hutool-extra/src/main/java/cn/hutool/v7/extra/template/engine/beetl/BeetlEngine.java +++ b/hutool-extra/src/main/java/cn/hutool/v7/extra/template/engine/beetl/BeetlEngine.java @@ -114,21 +114,17 @@ public class BeetlEngine implements TemplateEngine { config = TemplateConfig.DEFAULT; } - switch (config.getResourceMode()) { - case CLASSPATH: - return createGroupTemplate(new ClasspathResourceLoader(config.getPath(), config.getCharsetStr())); - case FILE: - return createGroupTemplate(new FileResourceLoader(config.getPath(), config.getCharsetStr())); - case WEB_ROOT: - return createGroupTemplate(new WebAppResourceLoader(config.getPath(), config.getCharsetStr())); - case STRING: - return createGroupTemplate(new StringTemplateResourceLoader()); - case COMPOSITE: - //TODO 需要定义复合资源加载器 - return createGroupTemplate(new CompositeResourceLoader()); - default: - return new GroupTemplate(); - } + return switch (config.getResourceMode()) { + case CLASSPATH -> + createGroupTemplate(new ClasspathResourceLoader(config.getPath(), config.getCharsetStr())); + case FILE -> createGroupTemplate(new FileResourceLoader(config.getPath(), config.getCharsetStr())); + case WEB_ROOT -> createGroupTemplate(new WebAppResourceLoader(config.getPath(), config.getCharsetStr())); + case STRING -> createGroupTemplate(new StringTemplateResourceLoader()); + case COMPOSITE -> + //TODO 需要定义复合资源加载器 + createGroupTemplate(new CompositeResourceLoader()); + default -> new GroupTemplate(); + }; } /** diff --git a/hutool-extra/src/test/java/cn/hutool/v7/extra/aop/ProxyBeanTest.java b/hutool-extra/src/test/java/cn/hutool/v7/extra/aop/ProxyBeanTest.java index 91f2e1966..43e6ceaeb 100644 --- a/hutool-extra/src/test/java/cn/hutool/v7/extra/aop/ProxyBeanTest.java +++ b/hutool-extra/src/test/java/cn/hutool/v7/extra/aop/ProxyBeanTest.java @@ -29,16 +29,12 @@ public class ProxyBeanTest { void proxyTest() { final IBean bean = ProxyUtil.newProxyInstance((proxy, method, args) -> { final String name = method.getName(); - switch (name){ - case "getName": - return "hutool"; - case "setName": - case "setAge": - return null; - case "getAge": - return 1; - } - throw new HutoolException("No method name: " + name); + return switch (name) { + case "getName" -> "hutool"; + case "setName", "setAge" -> null; + case "getAge" -> 1; + default -> throw new HutoolException("No method name: " + name); + }; }, IBean.class); // 测试代理类的Bean拷贝 diff --git a/hutool-extra/src/test/java/cn/hutool/v7/extra/management/ManagementUtilTest.java b/hutool-extra/src/test/java/cn/hutool/v7/extra/management/ManagementUtilTest.java index 963c703c3..635313953 100644 --- a/hutool-extra/src/test/java/cn/hutool/v7/extra/management/ManagementUtilTest.java +++ b/hutool-extra/src/test/java/cn/hutool/v7/extra/management/ManagementUtilTest.java @@ -16,7 +16,6 @@ package cn.hutool.v7.extra.management; -import cn.hutool.v7.core.lang.Console; import cn.hutool.v7.core.util.SystemUtil; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Disabled; diff --git a/hutool-extra/src/test/java/cn/hutool/v7/extra/xml/JAXBUtilTest.java b/hutool-extra/src/test/java/cn/hutool/v7/extra/xml/JAXBUtilTest.java index a43a4265e..dca838aa1 100644 --- a/hutool-extra/src/test/java/cn/hutool/v7/extra/xml/JAXBUtilTest.java +++ b/hutool-extra/src/test/java/cn/hutool/v7/extra/xml/JAXBUtilTest.java @@ -29,15 +29,17 @@ import org.junit.jupiter.api.Test; */ public class JAXBUtilTest { - private final String xmlStr = "\n" + - "\n" + - " 西安市第一中学\n" + - " 西安市雁塔区长安堡一号\n" + - " \n" + - " 101\n" + - " 101教室\n" + - " \n" + - "\n"; + private final String xmlStr = """ + + + 西安市第一中学 + 西安市雁塔区长安堡一号 + + 101 + 101教室 + + + """; @Test public void beanToXmlTest() { diff --git a/hutool-http/src/main/java/cn/hutool/v7/http/meta/HttpHeaderUtil.java b/hutool-http/src/main/java/cn/hutool/v7/http/meta/HttpHeaderUtil.java index 4a3aafb07..c268a2e4a 100644 --- a/hutool-http/src/main/java/cn/hutool/v7/http/meta/HttpHeaderUtil.java +++ b/hutool-http/src/main/java/cn/hutool/v7/http/meta/HttpHeaderUtil.java @@ -197,7 +197,6 @@ public class HttpHeaderUtil { this.value = split.get(2); } else { this.value = StrUtil.unWrap(value, '"'); - ; } } diff --git a/hutool-http/src/main/java/cn/hutool/v7/http/meta/HttpStatus.java b/hutool-http/src/main/java/cn/hutool/v7/http/meta/HttpStatus.java index 1d5ecee76..16664944e 100644 --- a/hutool-http/src/main/java/cn/hutool/v7/http/meta/HttpStatus.java +++ b/hutool-http/src/main/java/cn/hutool/v7/http/meta/HttpStatus.java @@ -138,7 +138,7 @@ public interface HttpStatus { * HTTP 1.1 Status-Code 307: Temporary Redirect.
* 由于不可预见的原因该页面暂不可用。当站点支持非 GET 方法的链接或操作的时候,该状态码优于 302 状态码。
* 方法和消息主体都不发生变化。
- * 见:https://www.rfc-editor.org/rfc/rfc7231#section-6.4.7 + * 见:rfc7231#section-6.4.7 */ int HTTP_TEMP_REDIRECT = 307; @@ -363,23 +363,17 @@ public interface HttpStatus { if(responseCode < 300){ return false; } - switch (responseCode){ - case HTTP_MOVED_PERM: - case HTTP_MOVED_TEMP: - case HTTP_SEE_OTHER: - // issue#1504@Github,307和308是RFC 7538中http 1.1定义的规范 - case HTTP_TEMP_REDIRECT: - case HTTP_PERMANENT_REDIRECT: - return true; - default: - return false; - } + return switch (responseCode) { + // issue#1504@Github,307和308是RFC 7538中http 1.1定义的规范 + case HTTP_MOVED_PERM, HTTP_MOVED_TEMP, HTTP_SEE_OTHER, HTTP_TEMP_REDIRECT, HTTP_PERMANENT_REDIRECT -> true; + default -> false; + }; } /** * 是否为重定后请求变更为GET方法,307、308方法消息主体都不发生变化,见:
*

    - *
  • https://www.rfc-editor.org/rfc/rfc7231#section-6.4.7
  • + *
  • rfc7231#section-6.4.7
  • *
  • https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Redirections
  • *
* diff --git a/hutool-http/src/main/java/cn/hutool/v7/http/meta/Method.java b/hutool-http/src/main/java/cn/hutool/v7/http/meta/Method.java index 924af51ca..0f5fc007f 100644 --- a/hutool-http/src/main/java/cn/hutool/v7/http/meta/Method.java +++ b/hutool-http/src/main/java/cn/hutool/v7/http/meta/Method.java @@ -33,13 +33,9 @@ public enum Method { public boolean isIgnoreBody() { //https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Methods/OPTIONS // OPTIONS请求可以带有响应体 - switch (this){ - case HEAD: - case CONNECT: - case TRACE: - return true; - default: - return false; - } + return switch (this) { + case HEAD, CONNECT, TRACE -> true; + default -> false; + }; } } diff --git a/hutool-http/src/main/java/cn/hutool/v7/http/multipart/MultipartFormData.java b/hutool-http/src/main/java/cn/hutool/v7/http/multipart/MultipartFormData.java index a5bba2880..076904b93 100644 --- a/hutool-http/src/main/java/cn/hutool/v7/http/multipart/MultipartFormData.java +++ b/hutool-http/src/main/java/cn/hutool/v7/http/multipart/MultipartFormData.java @@ -82,7 +82,7 @@ public class MultipartFormData { break; } - if (header.isFile == true) { + if (header.isFile) { // 文件类型的表单项 final String fileName = header.fileName; if (!fileName.isEmpty() && header.contentType.contains("application/x-macbinary")) { @@ -281,7 +281,7 @@ public class MultipartFormData { * @throws IOException IO异常 */ private void setLoaded() throws IOException { - if (loaded == true) { + if (loaded) { throw new IOException("Multi-part request already parsed."); } loaded = true; diff --git a/hutool-http/src/main/java/cn/hutool/v7/http/multipart/MultipartRequestInputStream.java b/hutool-http/src/main/java/cn/hutool/v7/http/multipart/MultipartRequestInputStream.java index cbc4e8e43..971bb00cd 100644 --- a/hutool-http/src/main/java/cn/hutool/v7/http/multipart/MultipartRequestInputStream.java +++ b/hutool-http/src/main/java/cn/hutool/v7/http/multipart/MultipartRequestInputStream.java @@ -89,12 +89,11 @@ public class MultipartRequestInputStream extends BufferedInputStream { //noinspection StatementWithEmptyBody while ((b = readByte()) <= ' ') { } - boundaryOutput.write(b); // now read boundary chars - while ((b = readByte()) != '\r') { + do { boundaryOutput.write(b); - } + } while ((b = readByte()) != '\r'); if (boundaryOutput.size() == 0) { throw new IOException("Problems with parsing request: invalid boundary"); } @@ -170,7 +169,7 @@ public class MultipartRequestInputStream extends BufferedInputStream { data.write(b); } skipBytes(3); - return charset == null ? data.toString() : data.toString(charset.name()); + return charset == null ? data.toString() : data.toString(charset); } // ---------------------------------------------------------------- copy diff --git a/hutool-http/src/main/java/cn/hutool/v7/http/server/servlet/ServletRequest.java b/hutool-http/src/main/java/cn/hutool/v7/http/server/servlet/ServletRequest.java index 0807a361a..ece0d9d0b 100644 --- a/hutool-http/src/main/java/cn/hutool/v7/http/server/servlet/ServletRequest.java +++ b/hutool-http/src/main/java/cn/hutool/v7/http/server/servlet/ServletRequest.java @@ -16,13 +16,12 @@ package cn.hutool.v7.http.server.servlet; -import jakarta.servlet.http.HttpServletRequest; import cn.hutool.v7.http.server.handler.ServerRequest; +import jakarta.servlet.http.HttpServletRequest; import java.io.IOException; import java.io.InputStream; import java.util.Collection; -import java.util.List; import java.util.Map; /** diff --git a/hutool-http/src/main/java/cn/hutool/v7/http/webservice/SoapClient.java b/hutool-http/src/main/java/cn/hutool/v7/http/webservice/SoapClient.java index 76fbd4b07..b06f357c0 100644 --- a/hutool-http/src/main/java/cn/hutool/v7/http/webservice/SoapClient.java +++ b/hutool-http/src/main/java/cn/hutool/v7/http/webservice/SoapClient.java @@ -16,7 +16,6 @@ package cn.hutool.v7.http.webservice; -import jakarta.xml.soap.*; import cn.hutool.v7.core.collection.CollUtil; import cn.hutool.v7.core.map.MapUtil; import cn.hutool.v7.core.text.StrUtil; @@ -27,6 +26,7 @@ import cn.hutool.v7.http.client.HeaderOperation; import cn.hutool.v7.http.client.Request; import cn.hutool.v7.http.client.Response; import cn.hutool.v7.http.meta.Method; +import jakarta.xml.soap.*; import javax.xml.XMLConstants; import javax.xml.namespace.QName; @@ -64,7 +64,7 @@ public class SoapClient implements HeaderOperation { * XML消息体的Content-Type * soap1.1 : text/xml * soap1.2 : application/soap+xml - * soap1.1与soap1.2区别: https://www.cnblogs.com/qlqwjy/p/7577147.html + * soap1.1与soap1.2区别: https://www.cnblogs.com/qlqwjy/p/7577147.html */ private static final String CONTENT_TYPE_SOAP11_TEXT_XML = "text/xml;charset="; private static final String CONTENT_TYPE_SOAP12_SOAP_XML = "application/soap+xml;charset="; @@ -568,14 +568,10 @@ public class SoapClient implements HeaderOperation { * @return 请求的Content-Type */ private String getXmlContentType() { - switch (this.protocol) { - case SOAP_1_1: - return CONTENT_TYPE_SOAP11_TEXT_XML.concat(this.charset.toString()); - case SOAP_1_2: - return CONTENT_TYPE_SOAP12_SOAP_XML.concat(this.charset.toString()); - default: - throw new SoapRuntimeException("Unsupported protocol: {}", this.protocol); - } + return switch (this.protocol) { + case SOAP_1_1 -> CONTENT_TYPE_SOAP11_TEXT_XML.concat(this.charset.toString()); + case SOAP_1_2 -> CONTENT_TYPE_SOAP12_SOAP_XML.concat(this.charset.toString()); + }; } /** diff --git a/hutool-http/src/main/java/cn/hutool/v7/http/webservice/SoapUtil.java b/hutool-http/src/main/java/cn/hutool/v7/http/webservice/SoapUtil.java index c95875b78..2f07ca079 100644 --- a/hutool-http/src/main/java/cn/hutool/v7/http/webservice/SoapUtil.java +++ b/hutool-http/src/main/java/cn/hutool/v7/http/webservice/SoapUtil.java @@ -16,17 +16,14 @@ package cn.hutool.v7.http.webservice; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.nio.charset.Charset; - +import cn.hutool.v7.core.util.CharsetUtil; +import cn.hutool.v7.core.xml.XmlUtil; import jakarta.xml.soap.SOAPException; import jakarta.xml.soap.SOAPMessage; -import cn.hutool.v7.core.exception.HutoolException; -import cn.hutool.v7.core.util.CharsetUtil; -import cn.hutool.v7.core.xml.XmlUtil; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.nio.charset.Charset; /** * SOAP相关工具类 @@ -98,11 +95,7 @@ public class SoapUtil { throw new SoapRuntimeException(e); } final String messageToString; - try { - messageToString = out.toString(charset.toString()); - } catch (final UnsupportedEncodingException e) { - throw new HutoolException(e); - } + messageToString = out.toString(charset); return pretty ? XmlUtil.format(messageToString) : messageToString; } } diff --git a/hutool-http/src/test/java/cn/hutool/v7/http/HttpUtilTest.java b/hutool-http/src/test/java/cn/hutool/v7/http/HttpUtilTest.java index 87cec6a1b..420e58adf 100644 --- a/hutool-http/src/test/java/cn/hutool/v7/http/HttpUtilTest.java +++ b/hutool-http/src/test/java/cn/hutool/v7/http/HttpUtilTest.java @@ -174,15 +174,16 @@ public class HttpUtilTest { @Test @Disabled public void httpUtilCreateRequest1PostSoap11Test(){ - final String requestBody = "\n" + - "\n" + - " \n" + - " \n" + - " 222.91.66.232\n" + - " \n" + - " \n" + - ""; + final String requestBody = """ + + + + + 222.91.66.232 + + + """; final String body = HttpUtil.createRequest("http://www.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx", Method.POST) .header(HeaderName.CONTENT_TYPE, "text/xml; charset=utf-8") @@ -201,15 +202,16 @@ public class HttpUtilTest { @Test @Disabled public void httpUtilCreateRequest2PostSoap12Test(){ - final String requestBody = "\n" + - "\n" + - " \n" + - " \n" + - " 222.91.66.232\n" + - " \n" + - " \n" + - ""; + final String requestBody = """ + + + + + 222.91.66.232 + + + """; final String body = HttpUtil.createPost("http://www.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx") .header(HeaderName.CONTENT_TYPE, "application/soap+xml; charset=utf-8") diff --git a/hutool-http/src/test/java/cn/hutool/v7/http/meta/ContentTypeTest.java b/hutool-http/src/test/java/cn/hutool/v7/http/meta/ContentTypeTest.java index 7c8ef9703..175f55967 100644 --- a/hutool-http/src/test/java/cn/hutool/v7/http/meta/ContentTypeTest.java +++ b/hutool-http/src/test/java/cn/hutool/v7/http/meta/ContentTypeTest.java @@ -35,9 +35,11 @@ public class ContentTypeTest { @Test void testGetWithLeadingSpace() { - final String json = " {\n" + - " \"name\": \"hutool\"\n" + - " }"; + final String json = """ + { + "name": "hutool" + }\ + """; final ContentType contentType = ContentType.get(json); assertEquals(ContentType.JSON, contentType); } diff --git a/hutool-json/src/main/java/cn/hutool/v7/json/jwt/signers/EllipticCurveJWTSigner.java b/hutool-json/src/main/java/cn/hutool/v7/json/jwt/signers/EllipticCurveJWTSigner.java index 068763cce..b93b0f357 100644 --- a/hutool-json/src/main/java/cn/hutool/v7/json/jwt/signers/EllipticCurveJWTSigner.java +++ b/hutool-json/src/main/java/cn/hutool/v7/json/jwt/signers/EllipticCurveJWTSigner.java @@ -23,7 +23,7 @@ import java.security.KeyPair; /** * 椭圆曲线(Elliptic Curve)的JWT签名器。
- * 按照https://datatracker.ietf.org/doc/html/rfc7518#section-3.4,
+ * 按照rfc7518#section-3.4,
* Elliptic Curve Digital Signature Algorithm (ECDSA)算法签名需要转换DER格式为pair (R, S) * * @author Looly @@ -71,19 +71,12 @@ public class EllipticCurveJWTSigner extends AsymmetricJWTSigner { * @throws JWTException JWT异常 */ private static int getSignatureByteArrayLength(final String alg) throws JWTException { - switch (alg) { - case "ES256": - case "SHA256withECDSA": - return 64; - case "ES384": - case "SHA384withECDSA": - return 96; - case "ES512": - case "SHA512withECDSA": - return 132; - default: - throw new JWTException("Unsupported Algorithm: {}", alg); - } + return switch (alg) { + case "ES256", "SHA256withECDSA" -> 64; + case "ES384", "SHA384withECDSA" -> 96; + case "ES512", "SHA512withECDSA" -> 132; + default -> throw new JWTException("Unsupported Algorithm: {}", alg); + }; } /** diff --git a/hutool-json/src/main/java/cn/hutool/v7/json/jwt/signers/JWTSignerUtil.java b/hutool-json/src/main/java/cn/hutool/v7/json/jwt/signers/JWTSignerUtil.java index 5f0094579..f7dfac889 100644 --- a/hutool-json/src/main/java/cn/hutool/v7/json/jwt/signers/JWTSignerUtil.java +++ b/hutool-json/src/main/java/cn/hutool/v7/json/jwt/signers/JWTSignerUtil.java @@ -16,7 +16,6 @@ package cn.hutool.v7.json.jwt.signers; -import cn.hutool.v7.core.lang.Assert; import cn.hutool.v7.core.regex.ReUtil; import cn.hutool.v7.json.jwt.JWTException; diff --git a/hutool-json/src/main/java/cn/hutool/v7/json/reader/JSONTokener.java b/hutool-json/src/main/java/cn/hutool/v7/json/reader/JSONTokener.java index 069d01e41..2f07856e6 100644 --- a/hutool-json/src/main/java/cn/hutool/v7/json/reader/JSONTokener.java +++ b/hutool-json/src/main/java/cn/hutool/v7/json/reader/JSONTokener.java @@ -71,7 +71,7 @@ public class JSONTokener extends ReaderWrapper { * 是否使用前一个字符 */ private boolean usePrevious; - private boolean ignoreZeroWithChar; + private final boolean ignoreZeroWithChar; // ------------------------------------------------------------------------------------ Constructor start @@ -302,14 +302,14 @@ public class JSONTokener extends ReaderWrapper { */ public String nextString() throws JSONException { final char c = nextClean(); - switch (c) { - case CharUtil.DOUBLE_QUOTES: - case CharUtil.SINGLE_QUOTE: - return nextWrapString(c); - } + return switch (c) { + case CharUtil.DOUBLE_QUOTES, CharUtil.SINGLE_QUOTE -> nextWrapString(c); + default -> + + // 兼容不严格的JSON,如key不被双引号包围的情况 + nextUnwrapString(c); + }; - // 兼容不严格的JSON,如key不被双引号包围的情况 - return nextUnwrapString(c); } /** @@ -445,27 +445,17 @@ public class JSONTokener extends ReaderWrapper { * @return 反转义字符 */ private char getUnescapeChar(final char c) { - switch (c) { - case 'b': - return '\b'; - case 't': - return '\t'; - case 'n': - return '\n'; - case 'f': - return '\f'; - case 'r': - return '\r'; - case 'u':// Unicode符 - return nextUnicode(); - case CharUtil.DOUBLE_QUOTES: - case CharUtil.SINGLE_QUOTE: - case CharUtil.BACKSLASH: - case CharUtil.SLASH: - return c; - default: - throw this.syntaxError("Illegal escape."); - } + return switch (c) { + case 'b' -> '\b'; + case 't' -> '\t'; + case 'n' -> '\n'; + case 'f' -> '\f'; + case 'r' -> '\r'; + case 'u' ->// Unicode符 + nextUnicode(); + case CharUtil.DOUBLE_QUOTES, CharUtil.SINGLE_QUOTE, CharUtil.BACKSLASH, CharUtil.SLASH -> c; + default -> throw this.syntaxError("Illegal escape."); + }; } /** diff --git a/hutool-json/src/main/java/cn/hutool/v7/json/support/JSONFormatStyle.java b/hutool-json/src/main/java/cn/hutool/v7/json/support/JSONFormatStyle.java index cad7762a9..dc222952c 100644 --- a/hutool-json/src/main/java/cn/hutool/v7/json/support/JSONFormatStyle.java +++ b/hutool-json/src/main/java/cn/hutool/v7/json/support/JSONFormatStyle.java @@ -87,7 +87,7 @@ public class JSONFormatStyle { */ public JSONFormatStyle(final String newline, final String indent, final boolean spaceAfterSeparators) { this.newline = Assert.notNull(newline); - this.indent = Assert.notNull(indent);; + this.indent = Assert.notNull(indent); this.spaceAfterSeparators = spaceAfterSeparators; } diff --git a/hutool-json/src/test/java/cn/hutool/v7/json/JSONNullTest.java b/hutool-json/src/test/java/cn/hutool/v7/json/JSONNullTest.java index 89e9ca545..9897453cc 100644 --- a/hutool-json/src/test/java/cn/hutool/v7/json/JSONNullTest.java +++ b/hutool-json/src/test/java/cn/hutool/v7/json/JSONNullTest.java @@ -23,11 +23,12 @@ public class JSONNullTest { @Test public void parseNullTest(){ - final JSONObject bodyjson = JSONUtil.parseObj("{\n" + - " \"device_model\": null,\n" + - " \"device_status_date\": null,\n" + - " \"imsi\": null,\n" + - " \"act_date\": \"2021-07-23T06:23:26.000+00:00\"}"); + final JSONObject bodyjson = JSONUtil.parseObj(""" + { + "device_model": null, + "device_status_date": null, + "imsi": null, + "act_date": "2021-07-23T06:23:26.000+00:00"}"""); Assertions.assertNull(bodyjson.get("device_model")); Assertions.assertNull(bodyjson.get("device_status_date")); Assertions.assertNull(bodyjson.get("imsi")); @@ -38,11 +39,12 @@ public class JSONNullTest { @Test public void parseNullTest2(){ - final JSONObject bodyjson = JSONUtil.parseObj("{\n" + - " \"device_model\": null,\n" + - " \"device_status_date\": null,\n" + - " \"imsi\": null,\n" + - " \"act_date\": \"2021-07-23T06:23:26.000+00:00\"}"); + final JSONObject bodyjson = JSONUtil.parseObj(""" + { + "device_model": null, + "device_status_date": null, + "imsi": null, + "act_date": "2021-07-23T06:23:26.000+00:00"}"""); Assertions.assertFalse(bodyjson.containsKey("device_model")); Assertions.assertFalse(bodyjson.containsKey("device_status_date")); Assertions.assertFalse(bodyjson.containsKey("imsi")); diff --git a/hutool-json/src/test/java/cn/hutool/v7/json/JSONUtilTest.java b/hutool-json/src/test/java/cn/hutool/v7/json/JSONUtilTest.java index 0f0718a2b..0ca0bb4fc 100644 --- a/hutool-json/src/test/java/cn/hutool/v7/json/JSONUtilTest.java +++ b/hutool-json/src/test/java/cn/hutool/v7/json/JSONUtilTest.java @@ -164,21 +164,22 @@ public class JSONUtilTest { map.put("rows", list); final String jsonStr = JSONUtil.toJsonPrettyStr(map); - Assertions.assertEquals("{\n" + - " \"total\": 13,\n" + - " \"rows\": [\n" + - " {\n" + - " \"name\": \"AAAAName\",\n" + - " \"a\": \"aaaa\",\n" + - " \"date\": 1727800929605\n" + - " },\n" + - " {\n" + - " \"name\": \"AAAA222Name\",\n" + - " \"a\": \"aaaa222\",\n" + - " \"date\": 1727800929605\n" + - " }\n" + - " ]\n" + - "}", jsonStr); + Assertions.assertEquals(""" + { + "total": 13, + "rows": [ + { + "name": "AAAAName", + "a": "aaaa", + "date": 1727800929605 + }, + { + "name": "AAAA222Name", + "a": "aaaa222", + "date": 1727800929605 + } + ] + }""", jsonStr); } @Test @@ -311,9 +312,10 @@ public class JSONUtilTest { @Test public void parseObjTest() { // 测试转义 - final JSONObject jsonObject = JSONUtil.parseObj("{\n" + - " \"test\": \"\\\\地库地库\",\n" + - "}"); + final JSONObject jsonObject = JSONUtil.parseObj(""" + { + "test": "\\\\地库地库", + }"""); assertEquals("\\地库地库", jsonObject.getObj("test")); } diff --git a/hutool-json/src/test/java/cn/hutool/v7/json/engine/FastJSONTest.java b/hutool-json/src/test/java/cn/hutool/v7/json/engine/FastJSONTest.java index 5d62fbd7d..d07690b53 100644 --- a/hutool-json/src/test/java/cn/hutool/v7/json/engine/FastJSONTest.java +++ b/hutool-json/src/test/java/cn/hutool/v7/json/engine/FastJSONTest.java @@ -36,11 +36,12 @@ public class FastJSONTest { String jsonString = engine.toJsonString(testBean); // 使用统一换行符 jsonString = StrUtil.removeAll(jsonString, '\r'); - Assertions.assertEquals("{\n" + - " \"name\":\"张三\",\n" + - " \"age\":18,\n" + - " \"gender\":true\n" + - "}", jsonString); + Assertions.assertEquals(""" + { + "name":"张三", + "age":18, + "gender":true + }""", jsonString); } @Test diff --git a/hutool-json/src/test/java/cn/hutool/v7/json/engine/GsonTest.java b/hutool-json/src/test/java/cn/hutool/v7/json/engine/GsonTest.java index b1ac21698..8e3e00161 100644 --- a/hutool-json/src/test/java/cn/hutool/v7/json/engine/GsonTest.java +++ b/hutool-json/src/test/java/cn/hutool/v7/json/engine/GsonTest.java @@ -37,11 +37,12 @@ public class GsonTest { final JSONEngineTest.TestBean testBean = new JSONEngineTest.TestBean("张三", 18, true); final String jsonString = engine.toJsonString(testBean); // 使用统一换行符 - Assertions.assertEquals("{\n" + - " \"name\": \"张三\",\n" + - " \"age\": 18,\n" + - " \"gender\": true\n" + - "}", jsonString); + Assertions.assertEquals(""" + { + "name": "张三", + "age": 18, + "gender": true + }""", jsonString); } @Test diff --git a/hutool-json/src/test/java/cn/hutool/v7/json/engine/HutoolJSONTest.java b/hutool-json/src/test/java/cn/hutool/v7/json/engine/HutoolJSONTest.java index e2225a124..591476734 100644 --- a/hutool-json/src/test/java/cn/hutool/v7/json/engine/HutoolJSONTest.java +++ b/hutool-json/src/test/java/cn/hutool/v7/json/engine/HutoolJSONTest.java @@ -27,10 +27,11 @@ public class HutoolJSONTest { final JSONEngineTest.TestBean testBean = new JSONEngineTest.TestBean("张三", 18, true); final String jsonString = engine.toJsonString(testBean); - Assertions.assertEquals("{\n" + - " \"name\": \"张三\",\n" + - " \"age\": 18,\n" + - " \"gender\": true\n" + - "}", jsonString); + Assertions.assertEquals(""" + { + "name": "张三", + "age": 18, + "gender": true + }""", jsonString); } } diff --git a/hutool-json/src/test/java/cn/hutool/v7/json/engine/JSONEngineTest.java b/hutool-json/src/test/java/cn/hutool/v7/json/engine/JSONEngineTest.java index 15b819f73..f6d3a0cba 100644 --- a/hutool-json/src/test/java/cn/hutool/v7/json/engine/JSONEngineTest.java +++ b/hutool-json/src/test/java/cn/hutool/v7/json/engine/JSONEngineTest.java @@ -160,19 +160,21 @@ public class JSONEngineTest { if("moshi".equals(engineName)){ // Moshi顺序不同 // 使用统一换行符 - assertEquals("{\n" + - " \"age\": 18,\n" + - " \"gender\": true,\n" + - " \"name\": \"张三\"\n" + - "}", jsonString); + assertEquals(""" + { + "age": 18, + "gender": true, + "name": "张三" + }""", jsonString); return; } // 使用统一换行符 - assertEquals("{\n" + - " \"name\": \"张三\",\n" + - " \"age\": 18,\n" + - " \"gender\": true\n" + - "}", jsonString); + assertEquals(""" + { + "name": "张三", + "age": 18, + "gender": true + }""", jsonString); } @Data diff --git a/hutool-json/src/test/java/cn/hutool/v7/json/engine/JacksonTest.java b/hutool-json/src/test/java/cn/hutool/v7/json/engine/JacksonTest.java index 38c349012..8004b4fb0 100644 --- a/hutool-json/src/test/java/cn/hutool/v7/json/engine/JacksonTest.java +++ b/hutool-json/src/test/java/cn/hutool/v7/json/engine/JacksonTest.java @@ -35,15 +35,16 @@ public class JacksonTest { String jsonString = engine.toJsonString(testBean); // 使用统一换行符 jsonString = StrUtil.removeAll(jsonString, '\r'); - Assertions.assertEquals("{\n" + - " \"name\" : \"张三\",\n" + - " \"age\" : 18,\n" + - " \"gender\" : true\n" + - "}", jsonString); + Assertions.assertEquals(""" + { + "name" : "张三", + "age" : 18, + "gender" : true + }""", jsonString); } /** - * https://gitee.com/chinabugotech/hutool/issues/IB3GM4
+ * issues#IB3GM4
* JSON和Jackson兼容 */ @Test diff --git a/hutool-json/src/test/java/cn/hutool/v7/json/issues/Issue1101Test.java b/hutool-json/src/test/java/cn/hutool/v7/json/issues/Issue1101Test.java index 539ca4871..370d0b2d3 100644 --- a/hutool-json/src/test/java/cn/hutool/v7/json/issues/Issue1101Test.java +++ b/hutool-json/src/test/java/cn/hutool/v7/json/issues/Issue1101Test.java @@ -45,34 +45,35 @@ public class Issue1101Test { @Test public void test(){ - final String json = "{\n" + - "\t\"children\": [{\n" + - "\t\t\"children\": [],\n" + - "\t\t\"id\": \"52c95b83-2083-4138-99fb-e6e21f0c1277\",\n" + - "\t\t\"nodeName\": \"admin\",\n" + - "\t\t\"parentId\": \"00010001\",\n" + - "\t\t\"sort\": 0,\n" + - "\t\t\"status\": true,\n" + - "\t\t\"treeNodeId\": \"00010001_52c95b83-2083-4138-99fb-e6e21f0c1277\",\n" + - "\t\t\"type\": 10\n" + - "\t}, {\n" + - "\t\t\"children\": [],\n" + - "\t\t\"id\": \"97054a82-f8ff-46a1-b76c-cbacf6d18045\",\n" + - "\t\t\"nodeName\": \"test\",\n" + - "\t\t\"parentId\": \"00010001\",\n" + - "\t\t\"sort\": 0,\n" + - "\t\t\"status\": true,\n" + - "\t\t\"treeNodeId\": \"00010001_97054a82-f8ff-46a1-b76c-cbacf6d18045\",\n" + - "\t\t\"type\": 10\n" + - "\t}],\n" + - "\t\"id\": \"00010001\",\n" + - "\t\"nodeName\": \"测试\",\n" + - "\t\"parentId\": \"0001\",\n" + - "\t\"sort\": 0,\n" + - "\t\"status\": true,\n" + - "\t\"treeNodeId\": \"00010001\",\n" + - "\t\"type\": 0\n" + - "}"; + final String json = """ + { + \t"children": [{ + \t\t"children": [], + \t\t"id": "52c95b83-2083-4138-99fb-e6e21f0c1277", + \t\t"nodeName": "admin", + \t\t"parentId": "00010001", + \t\t"sort": 0, + \t\t"status": true, + \t\t"treeNodeId": "00010001_52c95b83-2083-4138-99fb-e6e21f0c1277", + \t\t"type": 10 + \t}, { + \t\t"children": [], + \t\t"id": "97054a82-f8ff-46a1-b76c-cbacf6d18045", + \t\t"nodeName": "test", + \t\t"parentId": "00010001", + \t\t"sort": 0, + \t\t"status": true, + \t\t"treeNodeId": "00010001_97054a82-f8ff-46a1-b76c-cbacf6d18045", + \t\t"type": 10 + \t}], + \t"id": "00010001", + \t"nodeName": "测试", + \t"parentId": "0001", + \t"sort": 0, + \t"status": true, + \t"treeNodeId": "00010001", + \t"type": 0 + }"""; final JSONObject jsonObject = JSONUtil.parseObj(json); diff --git a/hutool-json/src/test/java/cn/hutool/v7/json/issues/Issue3139Test.java b/hutool-json/src/test/java/cn/hutool/v7/json/issues/Issue3139Test.java index 25c4b7860..5adb701f3 100644 --- a/hutool-json/src/test/java/cn/hutool/v7/json/issues/Issue3139Test.java +++ b/hutool-json/src/test/java/cn/hutool/v7/json/issues/Issue3139Test.java @@ -30,12 +30,13 @@ import java.util.List; public class Issue3139Test { @Test public void toBeanTest() { - final String xml = "\n" + - " \n" + - " 1\n" + - "

str

\n" + - "
\n" + - "
"; + final String xml = """ + + + 1 +

str

+
+
"""; final JSONObject jsonObject = JSONUtil.parseObj(xml); Assertions.assertEquals("{\"r\":{\"c\":{\"s\":1,\"p\":\"str\"}}}", jsonObject.toString()); diff --git a/hutool-json/src/test/java/cn/hutool/v7/json/issues/Issue3274Test.java b/hutool-json/src/test/java/cn/hutool/v7/json/issues/Issue3274Test.java index 601ed2854..e883a93d9 100644 --- a/hutool-json/src/test/java/cn/hutool/v7/json/issues/Issue3274Test.java +++ b/hutool-json/src/test/java/cn/hutool/v7/json/issues/Issue3274Test.java @@ -28,12 +28,13 @@ import org.junit.jupiter.api.Test; public class Issue3274Test { @Test public void toBeanTest() { - final JSONObject entries = JSONUtil.parseObj("{\n" + - " \n" + - " \"age\": 36,\n" + - " \"gender\": \"\",\n" + - " \"id\": \"123123123\"\n" + - "}", JSONConfig.of().setIgnoreError(true)); + final JSONObject entries = JSONUtil.parseObj(""" + { + \s + "age": 36, + "gender": "", + "id": "123123123" + }""", JSONConfig.of().setIgnoreError(true)); final LarkCoreHrPersonal larkCoreHrPersonal = entries.toBean(LarkCoreHrPersonal.class); Assertions.assertNotNull(larkCoreHrPersonal); } diff --git a/hutool-json/src/test/java/cn/hutool/v7/json/issues/IssueI5DHK2Test.java b/hutool-json/src/test/java/cn/hutool/v7/json/issues/IssueI5DHK2Test.java index 36fff0581..57c034c20 100644 --- a/hutool-json/src/test/java/cn/hutool/v7/json/issues/IssueI5DHK2Test.java +++ b/hutool-json/src/test/java/cn/hutool/v7/json/issues/IssueI5DHK2Test.java @@ -26,15 +26,16 @@ public class IssueI5DHK2Test { @Test public void toBeanTest(){ - final String jsonStr = "{\n" + - " \"punished_parties\": [{\n" + - " \"properties\": {\n" + - " \"employment_informations\": [{\n" + - " \"employer_name\": \"张三皮包公司\"\n" + - " }]\n" + - " }\n" + - " }]\n" + - "}"; + final String jsonStr = """ + { + "punished_parties": [{ + "properties": { + "employment_informations": [{ + "employer_name": "张三皮包公司" + }] + } + }] + }"""; final JSONObject json = JSONUtil.parseObj(jsonStr); final String exployerName = json diff --git a/hutool-json/src/test/java/cn/hutool/v7/json/issues/IssueI84V6ITest.java b/hutool-json/src/test/java/cn/hutool/v7/json/issues/IssueI84V6ITest.java index 5c18c934c..682bee8b5 100644 --- a/hutool-json/src/test/java/cn/hutool/v7/json/issues/IssueI84V6ITest.java +++ b/hutool-json/src/test/java/cn/hutool/v7/json/issues/IssueI84V6ITest.java @@ -27,9 +27,10 @@ public class IssueI84V6ITest { final String formatJsonStr = JSONUtil.formatJsonStr(a1); // Console.log(formatJsonStr); Assertions.assertEquals( - "{\n" + - " 'x': '\\n',\n" + - " 'y': ','\n" + - "}", formatJsonStr); + """ + { + 'x': '\\n', + 'y': ',' + }""", formatJsonStr); } } diff --git a/hutool-json/src/test/java/cn/hutool/v7/json/issues/IssueIAWE3HTest.java b/hutool-json/src/test/java/cn/hutool/v7/json/issues/IssueIAWE3HTest.java index 612e98a63..c229b1e2f 100644 --- a/hutool-json/src/test/java/cn/hutool/v7/json/issues/IssueIAWE3HTest.java +++ b/hutool-json/src/test/java/cn/hutool/v7/json/issues/IssueIAWE3HTest.java @@ -27,13 +27,14 @@ import java.util.Map; public class IssueIAWE3HTest { @Test void toMapTest() { - final String jsonStr = "{\n" + - " \"reply\": \"hi\",\n" + - " \"solved\": true,\n" + - " \"notifyTypes\": [\n" + - " \"push\"\n" + - " ]\n" + - "}"; + final String jsonStr = """ + { + "reply": "hi", + "solved": true, + "notifyTypes": [ + "push" + ] + }"""; final JSONObject jsonObject = JSONUtil.parseObj(jsonStr); diff --git a/hutool-log/src/main/java/cn/hutool/v7/log/engine/log4j/Log4jLog.java b/hutool-log/src/main/java/cn/hutool/v7/log/engine/log4j/Log4jLog.java index 6bd018eb8..0f3607f7a 100644 --- a/hutool-log/src/main/java/cn/hutool/v7/log/engine/log4j/Log4jLog.java +++ b/hutool-log/src/main/java/cn/hutool/v7/log/engine/log4j/Log4jLog.java @@ -129,26 +129,14 @@ public class Log4jLog extends AbstractLog { // ------------------------------------------------------------------------- Log @Override public void log(final String fqcn, final cn.hutool.v7.log.level.Level level, final Throwable t, final String format, final Object... arguments) { - final Level log4jLevel; - switch (level) { - case TRACE: - log4jLevel = Level.TRACE; - break; - case DEBUG: - log4jLevel = Level.DEBUG; - break; - case INFO: - log4jLevel = Level.INFO; - break; - case WARN: - log4jLevel = Level.WARN; - break; - case ERROR: - log4jLevel = Level.ERROR; - break; - default: - throw new Error(StrUtil.format("Can not identify level: {}", level)); - } + final Level log4jLevel = switch (level) { + case TRACE -> Level.TRACE; + case DEBUG -> Level.DEBUG; + case INFO -> Level.INFO; + case WARN -> Level.WARN; + case ERROR -> Level.ERROR; + default -> throw new Error(StrUtil.format("Can not identify level: {}", level)); + }; if(logger.isEnabled(log4jLevel)) { //Log4j2的API设计已内置类名自动获取能力 diff --git a/hutool-log/src/main/java/cn/hutool/v7/log/engine/log4j2/Log4j2Log.java b/hutool-log/src/main/java/cn/hutool/v7/log/engine/log4j2/Log4j2Log.java index 1e64bf8c9..07ab7b313 100644 --- a/hutool-log/src/main/java/cn/hutool/v7/log/engine/log4j2/Log4j2Log.java +++ b/hutool-log/src/main/java/cn/hutool/v7/log/engine/log4j2/Log4j2Log.java @@ -128,26 +128,14 @@ public class Log4j2Log extends AbstractLog { // ------------------------------------------------------------------------- Log @Override public void log(final String fqcn, final cn.hutool.v7.log.level.Level level, final Throwable t, final String format, final Object... arguments) { - final Level log4j2Level; - switch (level) { - case TRACE: - log4j2Level = Level.TRACE; - break; - case DEBUG: - log4j2Level = Level.DEBUG; - break; - case INFO: - log4j2Level = Level.INFO; - break; - case WARN: - log4j2Level = Level.WARN; - break; - case ERROR: - log4j2Level = Level.ERROR; - break; - default: - throw new Error(StrUtil.format("Can not identify level: {}", level)); - } + final Level log4j2Level = switch (level) { + case TRACE -> Level.TRACE; + case DEBUG -> Level.DEBUG; + case INFO -> Level.INFO; + case WARN -> Level.WARN; + case ERROR -> Level.ERROR; + default -> throw new Error(StrUtil.format("Can not identify level: {}", level)); + }; logIfEnabled(fqcn, log4j2Level, t, format, arguments); } diff --git a/hutool-log/src/main/java/cn/hutool/v7/log/engine/slf4j/Slf4jLogEngine.java b/hutool-log/src/main/java/cn/hutool/v7/log/engine/slf4j/Slf4jLogEngine.java index 95730db49..474dbbca1 100644 --- a/hutool-log/src/main/java/cn/hutool/v7/log/engine/slf4j/Slf4jLogEngine.java +++ b/hutool-log/src/main/java/cn/hutool/v7/log/engine/slf4j/Slf4jLogEngine.java @@ -16,15 +16,14 @@ package cn.hutool.v7.log.engine.slf4j; -import java.io.OutputStream; -import java.io.PrintStream; -import java.io.UnsupportedEncodingException; - +import cn.hutool.v7.core.util.CharsetUtil; import cn.hutool.v7.log.AbsLogEngine; +import cn.hutool.v7.log.Log; import org.slf4j.LoggerFactory; import org.slf4j.helpers.NOPLoggerFactory; -import cn.hutool.v7.log.Log; +import java.io.OutputStream; +import java.io.PrintStream; /** * SLF4J log.
@@ -57,16 +56,12 @@ public class Slf4jLogEngine extends AbsLogEngine { // the console during automatic detection. final StringBuilder buf = new StringBuilder(); final PrintStream err = System.err; - try { - System.setErr(new PrintStream(new OutputStream() { - @Override - public void write(final int b) { - buf.append((char) b); - } - }, true, "US-ASCII")); - } catch (final UnsupportedEncodingException e) { - throw new Error(e); - } + System.setErr(new PrintStream(new OutputStream() { + @Override + public void write(final int b) { + buf.append((char) b); + } + }, true, CharsetUtil.US_ASCII)); try { if (LoggerFactory.getILoggerFactory() instanceof NOPLoggerFactory) { diff --git a/hutool-log/src/main/java/cn/hutool/v7/log/engine/tinylog/TinyLog.java b/hutool-log/src/main/java/cn/hutool/v7/log/engine/tinylog/TinyLog.java index 507d8fd79..f1d10c590 100644 --- a/hutool-log/src/main/java/cn/hutool/v7/log/engine/tinylog/TinyLog.java +++ b/hutool-log/src/main/java/cn/hutool/v7/log/engine/tinylog/TinyLog.java @@ -172,30 +172,15 @@ public class TinyLog extends AbstractLog { * @since 4.0.3 */ private Level toTinyLevel(final cn.hutool.v7.log.level.Level level) { - final Level tinyLevel; - switch (level) { - case TRACE: - tinyLevel = Level.TRACE; - break; - case DEBUG: - tinyLevel = Level.DEBUG; - break; - case INFO: - tinyLevel = Level.INFO; - break; - case WARN: - tinyLevel = Level.WARN; - break; - case ERROR: - tinyLevel = Level.ERROR; - break; - case OFF: - tinyLevel = Level.OFF; - break; - default: - throw new Error(StrUtil.format("Can not identify level: {}", level)); - } - return tinyLevel; + return switch (level) { + case TRACE -> Level.TRACE; + case DEBUG -> Level.DEBUG; + case INFO -> Level.INFO; + case WARN -> Level.WARN; + case ERROR -> Level.ERROR; + case OFF -> Level.OFF; + default -> throw new Error(StrUtil.format("Can not identify level: {}", level)); + }; } /** diff --git a/hutool-poi/src/main/java/cn/hutool/v7/poi/csv/CsvParser.java b/hutool-poi/src/main/java/cn/hutool/v7/poi/csv/CsvParser.java index 9321d9080..b4c2b7a09 100644 --- a/hutool-poi/src/main/java/cn/hutool/v7/poi/csv/CsvParser.java +++ b/hutool-poi/src/main/java/cn/hutool/v7/poi/csv/CsvParser.java @@ -226,7 +226,7 @@ public final class CsvParser extends ComputeIter implements Closeable, S while (true) { c = tokener.next(); if(c < 0){ - if (currentField.length() > 0 || preChar == config.fieldSeparator) { + if (!currentField.isEmpty() || preChar == config.fieldSeparator) { if(this.inQuotes){ // 未闭合的文本包装,在末尾补充包装符 currentField.append(config.textDelimiter); diff --git a/hutool-poi/src/main/java/cn/hutool/v7/poi/excel/cell/CellReferenceUtil.java b/hutool-poi/src/main/java/cn/hutool/v7/poi/excel/cell/CellReferenceUtil.java index 6798827e6..b2ed05b7a 100644 --- a/hutool-poi/src/main/java/cn/hutool/v7/poi/excel/cell/CellReferenceUtil.java +++ b/hutool-poi/src/main/java/cn/hutool/v7/poi/excel/cell/CellReferenceUtil.java @@ -38,7 +38,7 @@ public class CellReferenceUtil { } final StringBuilder colName = StrUtil.builder(); do { - if (colName.length() > 0) { + if (!colName.isEmpty()) { index--; } final int remainder = index % 26; diff --git a/hutool-poi/src/main/java/cn/hutool/v7/poi/excel/cell/values/CompositeCellValue.java b/hutool-poi/src/main/java/cn/hutool/v7/poi/excel/cell/values/CompositeCellValue.java index fac5feeb8..0ac001d73 100644 --- a/hutool-poi/src/main/java/cn/hutool/v7/poi/excel/cell/values/CompositeCellValue.java +++ b/hutool-poi/src/main/java/cn/hutool/v7/poi/excel/cell/values/CompositeCellValue.java @@ -83,26 +83,14 @@ public class CompositeCellValue implements CellValue { cellType = cell.getCellType(); } - final Object value; - switch (cellType) { - case NUMERIC: - value = new NumericCellValue(cell).getValue(); - break; - case BOOLEAN: - value = cell.getBooleanCellValue(); - break; - case FORMULA: - value = of(cell, cell.getCachedFormulaResultType(), cellEditor).getValue(); - break; - case BLANK: - value = StrUtil.EMPTY; - break; - case ERROR: - value = new ErrorCellValue(cell).getValue(); - break; - default: - value = cell.getStringCellValue(); - } + final Object value = switch (cellType) { + case NUMERIC -> new NumericCellValue(cell).getValue(); + case BOOLEAN -> cell.getBooleanCellValue(); + case FORMULA -> of(cell, cell.getCachedFormulaResultType(), cellEditor).getValue(); + case BLANK -> StrUtil.EMPTY; + case ERROR -> new ErrorCellValue(cell).getValue(); + default -> cell.getStringCellValue(); + }; return null == cellEditor ? value : cellEditor.edit(cell, value); } diff --git a/hutool-poi/src/main/java/cn/hutool/v7/poi/excel/sax/SheetDataSaxHandler.java b/hutool-poi/src/main/java/cn/hutool/v7/poi/excel/sax/SheetDataSaxHandler.java index 9ffb0e216..3774a876c 100644 --- a/hutool-poi/src/main/java/cn/hutool/v7/poi/excel/sax/SheetDataSaxHandler.java +++ b/hutool-poi/src/main/java/cn/hutool/v7/poi/excel/sax/SheetDataSaxHandler.java @@ -297,7 +297,7 @@ public class SheetDataSaxHandler extends DefaultHandler { final String contentStr = StrUtil.trim(lastContent); final Object value; - if(this.lastFormula.length() > 0){ + if(!this.lastFormula.isEmpty()){ if(CellDataType.NULL == this.cellDataType){ // 对于公式,默认值类型为数字 this.cellDataType = CellDataType.NUMBER; diff --git a/hutool-poi/src/test/java/cn/hutool/v7/poi/csv/CsvUtilTest.java b/hutool-poi/src/test/java/cn/hutool/v7/poi/csv/CsvUtilTest.java index 40c1630e1..63253823e 100644 --- a/hutool-poi/src/test/java/cn/hutool/v7/poi/csv/CsvUtilTest.java +++ b/hutool-poi/src/test/java/cn/hutool/v7/poi/csv/CsvUtilTest.java @@ -78,8 +78,10 @@ public class CsvUtilTest { @Test public void readCsvStr1WithUncloseTest(){ - final CsvData data = CsvUtil.getReader().readFromStr("# 这是一行注释,读取时应忽略\n" + - "\"sss,sss\",姓名,\"性别\",关注\"对象\",年龄,\"\",\"\"\"\n"); + final CsvData data = CsvUtil.getReader().readFromStr(""" + # 这是一行注释,读取时应忽略 + "sss,sss",姓名,"性别",关注"对象",年龄,"",""\" + """); final List rows = data.getRows(); final CsvRow row0 = rows.get(0); Assertions.assertEquals("sss,sss", row0.get(0)); @@ -95,8 +97,10 @@ public class CsvUtilTest { @Test public void readCsvStr1WithUncloseTrimTest(){ final CsvData data = CsvUtil.getReader(CsvReadConfig.of().setTrimField(true)) - .readFromStr("# 这是一行注释,读取时应忽略\n" + - "\"sss,sss\",姓名,\"性别\",关注\"对象\",年龄,\"\",\"\"\"\n"); + .readFromStr(""" + # 这是一行注释,读取时应忽略 + "sss,sss",姓名,"性别",关注"对象",年龄,"",""\" + """); final List rows = data.getRows(); final CsvRow row0 = rows.get(0); Assertions.assertEquals("sss,sss", row0.get(0)); @@ -110,8 +114,10 @@ public class CsvUtilTest { @Test public void readCsvStrUseConsumerTest(){ - CsvUtil.getReader().readFromStr("# 这是一行注释,读取时应忽略\n" + - "\"sss,sss\",姓名,\"性别\",关注\"对象\",年龄,\"\",\"\"\"\n",(csvRow)-> { + CsvUtil.getReader().readFromStr(""" + # 这是一行注释,读取时应忽略 + "sss,sss",姓名,"性别",关注"对象",年龄,"",""\" + """,(csvRow)-> { // 只有一行,所以直接判断 Assertions.assertEquals("sss,sss", csvRow.get(0)); Assertions.assertEquals("姓名", csvRow.get(1)); diff --git a/hutool-setting/src/main/java/cn/hutool/v7/setting/toml/TomlReader.java b/hutool-setting/src/main/java/cn/hutool/v7/setting/toml/TomlReader.java index 686c0334e..1a3f8941a 100644 --- a/hutool-setting/src/main/java/cn/hutool/v7/setting/toml/TomlReader.java +++ b/hutool-setting/src/main/java/cn/hutool/v7/setting/toml/TomlReader.java @@ -224,57 +224,46 @@ public class TomlReader { } private Object nextValue(final char firstChar) { - switch (firstChar) { - case '+': - case '-': - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - return nextNumberOrDate(firstChar); - case '"': + return switch (firstChar) { + case '+', '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' -> nextNumberOrDate(firstChar); + case '"' -> { if (pos + 1 < data.length()) { final char c2 = data.charAt(pos); final char c3 = data.charAt(pos + 1); if (c2 == '"' && c3 == '"') { pos += 2; - return nextBasicMultilineString(); + yield nextBasicMultilineString(); } } - return nextBasicString(); - case '\'': + yield nextBasicString(); + } + case '\'' -> { if (pos + 1 < data.length()) { final char c2 = data.charAt(pos); final char c3 = data.charAt(pos + 1); if (c2 == '\'' && c3 == '\'') { pos += 2; - return nextLiteralMultilineString(); + yield nextLiteralMultilineString(); } } - return nextLiteralString(); - case '[': - return nextArray(); - case '{': - return nextInlineTable(); - case 't':// Must be "true" + yield nextLiteralString(); + } + case '[' -> nextArray(); + case '{' -> nextInlineTable(); + case 't' -> { if (pos + 3 > data.length() || next() != 'r' || next() != 'u' || next() != 'e') { throw new SettingException("Invalid value at line " + line); } - return true; - case 'f':// Must be "false" + yield true; + } + case 'f' -> { if (pos + 4 > data.length() || next() != 'a' || next() != 'l' || next() != 's' || next() != 'e') { throw new SettingException("Invalid value at line " + line); } - return false; - default: - throw new SettingException("Invalid character '" + toString(firstChar) + "' at line " + line); - } + yield false; + } + default -> throw new SettingException("Invalid character '" + toString(firstChar) + "' at line " + line); + }; } private List nextArray() { @@ -663,20 +652,14 @@ public class TomlReader { * Converts a char to a String. The char is escaped if needed. */ private String toString(final char c) { - switch (c) { - case '\b': - return "\\b"; - case '\t': - return "\\t"; - case '\n': - return "\\n"; - case '\r': - return "\\r"; - case '\f': - return "\\f"; - default: - return String.valueOf(c); - } + return switch (c) { + case '\b' -> "\\b"; + case '\t' -> "\\t"; + case '\n' -> "\\n"; + case '\r' -> "\\r"; + case '\f' -> "\\f"; + default -> String.valueOf(c); + }; } } diff --git a/hutool-socket/src/test/java/cn/hutool/v7/socket/nio/NioClientTest.java b/hutool-socket/src/test/java/cn/hutool/v7/socket/nio/NioClientTest.java index 943659fe3..beae54c8e 100644 --- a/hutool-socket/src/test/java/cn/hutool/v7/socket/nio/NioClientTest.java +++ b/hutool-socket/src/test/java/cn/hutool/v7/socket/nio/NioClientTest.java @@ -58,7 +58,7 @@ public class NioClientTest { final Scanner scanner = new Scanner(System.in); while (scanner.hasNextLine()) { final String request = scanner.nextLine(); - if (request != null && request.trim().length() > 0) { + if (request != null && !request.trim().isEmpty()) { client.write(BufferUtil.ofUtf8(request)); } } diff --git a/hutool-swing/src/main/java/cn/hutool/v7/swing/img/Img.java b/hutool-swing/src/main/java/cn/hutool/v7/swing/img/Img.java index 2221e4555..ff5adc524 100644 --- a/hutool-swing/src/main/java/cn/hutool/v7/swing/img/Img.java +++ b/hutool-swing/src/main/java/cn/hutool/v7/swing/img/Img.java @@ -859,12 +859,10 @@ public class Img implements Flushable, Serializable { */ private int getTypeInt() { //noinspection SwitchStatementWithTooFewBranches - switch (this.targetImageType) { - case ImgUtil.IMAGE_TYPE_PNG: - return BufferedImage.TYPE_INT_ARGB; - default: - return BufferedImage.TYPE_INT_RGB; - } + return switch (this.targetImageType) { + case ImgUtil.IMAGE_TYPE_PNG -> BufferedImage.TYPE_INT_ARGB; + default -> BufferedImage.TYPE_INT_RGB; + }; } /** diff --git a/hutool-swing/src/main/java/cn/hutool/v7/swing/qrcode/QrCodeUtil.java b/hutool-swing/src/main/java/cn/hutool/v7/swing/qrcode/QrCodeUtil.java index b9cfd6bfa..7c5446b29 100644 --- a/hutool-swing/src/main/java/cn/hutool/v7/swing/qrcode/QrCodeUtil.java +++ b/hutool-swing/src/main/java/cn/hutool/v7/swing/qrcode/QrCodeUtil.java @@ -171,17 +171,11 @@ public class QrCodeUtil { * @since 4.1.2 */ public static void generate(final String content, final QrConfig config, final String imageType, final OutputStream out) { - final BitMatrixRender render; - switch (imageType) { - case QR_TYPE_SVG: - render = new SVGRender(config); - break; - case QR_TYPE_TXT: - render = new AsciiArtRender(config); - break; - default: - render = new ImageRender(config, imageType); - } + final BitMatrixRender render = switch (imageType) { + case QR_TYPE_SVG -> new SVGRender(config); + case QR_TYPE_TXT -> new AsciiArtRender(config); + default -> new ImageRender(config, imageType); + }; render.render(encode(content, config), out); }