diff --git a/CHANGELOG.md b/CHANGELOG.md index d18343934..08e48423e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,8 @@ * 【http 】 HttpRequest支持307、308状态码识别(issue#1504@Github) * 【core 】 CharUtil.isBlankChar增加\u0000判断(pr#1505@Github) * 【extra 】 添加Houbb Pinyin支持(pr#1506@Github) +* 【core 】 添加LambdaUtil(pr#295@Gitee) +* 【core 】 添加StrPool和CharPool ### Bug修复 * 【core 】 修复Validator.isUrl()传空返回true(issue#I3ETTY@Gitee) diff --git a/hutool-core/src/main/java/cn/hutool/core/collection/CollUtil.java b/hutool-core/src/main/java/cn/hutool/core/collection/CollUtil.java index 927ecb69e..56e5bfe50 100644 --- a/hutool-core/src/main/java/cn/hutool/core/collection/CollUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/collection/CollUtil.java @@ -21,6 +21,7 @@ import cn.hutool.core.util.ReflectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.TypeUtil; +import java.io.Serializable; import java.lang.reflect.Type; import java.util.AbstractCollection; import java.util.ArrayList; @@ -2916,7 +2917,7 @@ public class CollUtil { * @author Looly */ @FunctionalInterface - public interface Consumer { + public interface Consumer extends Serializable { /** * 接受并处理一个参数 * @@ -2934,7 +2935,7 @@ public class CollUtil { * @author Looly */ @FunctionalInterface - public interface KVConsumer { + public interface KVConsumer extends Serializable{ /** * 接受并处理一对参数 * diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/func/Func.java b/hutool-core/src/main/java/cn/hutool/core/lang/func/Func.java index 88eda80f4..8f164dcc9 100644 --- a/hutool-core/src/main/java/cn/hutool/core/lang/func/Func.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/func/Func.java @@ -1,11 +1,13 @@ package cn.hutool.core.lang.func; +import java.io.Serializable; + /** * 函数对象
* 接口灵感来自于ActFramework
* 一个函数接口代表一个一个函数,用于包装一个函数为对象
* 在JDK8之前,Java的函数并不能作为参数传递,也不能作为返回值存在,此接口用于将一个函数包装成为一个对象,从而传递对象 - * + * * @author Looly * * @param

参数类型 @@ -13,10 +15,10 @@ package cn.hutool.core.lang.func; * @since 3.1.0 */ @FunctionalInterface -public interface Func { +public interface Func extends Serializable { /** * 执行函数 - * + * * @param parameters 参数列表 * @return 函数执行结果 * @throws Exception 自定义异常 diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/func/Func0.java b/hutool-core/src/main/java/cn/hutool/core/lang/func/Func0.java index 8be477384..ae7216eca 100644 --- a/hutool-core/src/main/java/cn/hutool/core/lang/func/Func0.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/func/Func0.java @@ -1,21 +1,23 @@ package cn.hutool.core.lang.func; +import java.io.Serializable; + /** * 无参数的函数对象
* 接口灵感来自于ActFramework
* 一个函数接口代表一个一个函数,用于包装一个函数为对象
* 在JDK8之前,Java的函数并不能作为参数传递,也不能作为返回值存在,此接口用于将一个函数包装成为一个对象,从而传递对象 - * + * * @author Looly * * @param 返回值类型 * @since 4.5.2 */ @FunctionalInterface -public interface Func0 { +public interface Func0 extends Serializable { /** * 执行函数 - * + * * @return 函数执行结果 * @throws Exception 自定义异常 */ diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/func/Func1.java b/hutool-core/src/main/java/cn/hutool/core/lang/func/Func1.java index 0e2a6930e..303af0920 100644 --- a/hutool-core/src/main/java/cn/hutool/core/lang/func/Func1.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/func/Func1.java @@ -1,11 +1,13 @@ package cn.hutool.core.lang.func; +import java.io.Serializable; + /** * 只有一个参数的函数对象
* 接口灵感来自于ActFramework
* 一个函数接口代表一个一个函数,用于包装一个函数为对象
* 在JDK8之前,Java的函数并不能作为参数传递,也不能作为返回值存在,此接口用于将一个函数包装成为一个对象,从而传递对象 - * + * * @author Looly * * @param

参数类型 @@ -13,11 +15,11 @@ package cn.hutool.core.lang.func; * @since 4.2.2 */ @FunctionalInterface -public interface Func1 { - +public interface Func1 extends Serializable { + /** * 执行函数 - * + * * @param parameter 参数 * @return 函数执行结果 * @throws Exception 自定义异常 diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/func/LambdaUtil.java b/hutool-core/src/main/java/cn/hutool/core/lang/func/LambdaUtil.java new file mode 100644 index 000000000..54241928f --- /dev/null +++ b/hutool-core/src/main/java/cn/hutool/core/lang/func/LambdaUtil.java @@ -0,0 +1,52 @@ +package cn.hutool.core.lang.func; + +import cn.hutool.core.lang.SimpleCache; +import cn.hutool.core.util.ReflectUtil; + +import java.io.Serializable; +import java.lang.invoke.SerializedLambda; + +/** + * Lambda相关工具类 + * + * @author looly, Scen + * @since 5.6.3 + */ +public class LambdaUtil { + + private static final SimpleCache cache = new SimpleCache<>(); + + /** + * 解析lambda表达式,加了缓存。 + * 该缓存可能会在任意不定的时间被清除 + * + * @param Lambda类型 + * @param func 需要解析的 lambda 对象(无参方法) + * @return 返回解析后的结果 + */ + public static SerializedLambda resolve(Func1 func) { + return _resolve(func); + } + + /** + * 获取lambda表达式函数(方法)名称 + * + * @param Lambda类型 + * @param func 函数(无参方法) + * @return 函数名称 + */ + public static String getMethodName(Func1 func) { + return resolve(func).getImplMethodName(); + } + + /** + * 解析lambda表达式,加了缓存。 + * 该缓存可能会在任意不定的时间被清除 + * + * @param func 需要解析的 lambda 对象 + * @return 返回解析后的结果 + */ + private static SerializedLambda _resolve(Serializable func) { + return cache.get(func.getClass().getName(), () -> ReflectUtil.invoke(func, "writeReplace")); + } +} diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/func/VoidFunc.java b/hutool-core/src/main/java/cn/hutool/core/lang/func/VoidFunc.java index 9d8576164..9caa90287 100644 --- a/hutool-core/src/main/java/cn/hutool/core/lang/func/VoidFunc.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/func/VoidFunc.java @@ -1,22 +1,24 @@ package cn.hutool.core.lang.func; +import java.io.Serializable; + /** * 函数对象
* 接口灵感来自于ActFramework
* 一个函数接口代表一个一个函数,用于包装一个函数为对象
* 在JDK8之前,Java的函数并不能作为参数传递,也不能作为返回值存在,此接口用于将一个函数包装成为一个对象,从而传递对象 - * + * * @author Looly * * @param

参数类型 * @since 3.1.0 */ @FunctionalInterface -public interface VoidFunc

{ - +public interface VoidFunc

extends Serializable { + /** * 执行函数 - * + * * @param parameters 参数列表 * @throws Exception 自定义异常 */ diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/func/VoidFunc0.java b/hutool-core/src/main/java/cn/hutool/core/lang/func/VoidFunc0.java index 952039539..f96ad21ec 100644 --- a/hutool-core/src/main/java/cn/hutool/core/lang/func/VoidFunc0.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/func/VoidFunc0.java @@ -1,21 +1,23 @@ package cn.hutool.core.lang.func; +import java.io.Serializable; + /** * 函数对象
* 接口灵感来自于ActFramework
* 一个函数接口代表一个一个函数,用于包装一个函数为对象
* 在JDK8之前,Java的函数并不能作为参数传递,也不能作为返回值存在,此接口用于将一个函数包装成为一个对象,从而传递对象 - * + * * @author Looly * * @since 3.2.3 */ @FunctionalInterface -public interface VoidFunc0 { +public interface VoidFunc0 extends Serializable { /** * 执行函数 - * + * * @throws Exception 自定义异常 */ void call() throws Exception; diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/func/VoidFunc1.java b/hutool-core/src/main/java/cn/hutool/core/lang/func/VoidFunc1.java index f4abfd97c..48f87bfc1 100644 --- a/hutool-core/src/main/java/cn/hutool/core/lang/func/VoidFunc1.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/func/VoidFunc1.java @@ -1,21 +1,23 @@ package cn.hutool.core.lang.func; +import java.io.Serializable; + /** * 函数对象
* 接口灵感来自于ActFramework
* 一个函数接口代表一个一个函数,用于包装一个函数为对象
* 在JDK8之前,Java的函数并不能作为参数传递,也不能作为返回值存在,此接口用于将一个函数包装成为一个对象,从而传递对象 - * + * * @author Looly * * @since 3.2.3 */ @FunctionalInterface -public interface VoidFunc1

{ - +public interface VoidFunc1

extends Serializable { + /** * 执行函数 - * + * * @param parameter 参数 * @throws Exception 自定义异常 */ diff --git a/hutool-core/src/main/java/cn/hutool/core/text/CharPool.java b/hutool-core/src/main/java/cn/hutool/core/text/CharPool.java new file mode 100644 index 000000000..06b922a73 --- /dev/null +++ b/hutool-core/src/main/java/cn/hutool/core/text/CharPool.java @@ -0,0 +1,86 @@ +package cn.hutool.core.text; + +/** + * 常用字符常量 + * + * @author looly + * @since 5.6.3 + */ +public interface CharPool { + /** + * 字符常量:空格符 {@code ' '} + */ + char SPACE = ' '; + /** + * 字符常量:制表符 {@code '\t'} + */ + char TAB = ' '; + /** + * 字符常量:点 {@code '.'} + */ + char DOT = '.'; + /** + * 字符常量:斜杠 {@code '/'} + */ + char SLASH = '/'; + /** + * 字符常量:反斜杠 {@code '\\'} + */ + char BACKSLASH = '\\'; + /** + * 字符常量:回车符 {@code '\r'} + */ + char CR = '\r'; + /** + * 字符常量:换行符 {@code '\n'} + */ + char LF = '\n'; + /** + * 字符常量:减号(连接符) {@code '-'} + */ + char DASHED = '-'; + /** + * 字符常量:下划线 {@code '_'} + */ + char UNDERLINE = '_'; + /** + * 字符常量:逗号 {@code ','} + */ + char COMMA = ','; + /** + * 字符常量:花括号(左) '{' + */ + char DELIM_START = '{'; + /** + * 字符常量:花括号(右) '}' + */ + char DELIM_END = '}'; + /** + * 字符常量:中括号(左) {@code '['} + */ + char BRACKET_START = '['; + /** + * 字符常量:中括号(右) {@code ']'} + */ + char BRACKET_END = ']'; + /** + * 字符常量:双引号 {@code '"'} + */ + char DOUBLE_QUOTES = '"'; + /** + * 字符常量:单引号 {@code '\''} + */ + char SINGLE_QUOTE = '\''; + /** + * 字符常量:与 {@code '&'} + */ + char AMP = '&'; + /** + * 字符常量:冒号 {@code ':'} + */ + char COLON = ':'; + /** + * 字符常量:艾特 {@code '@'} + */ + char AT = '@'; +} diff --git a/hutool-core/src/main/java/cn/hutool/core/text/StrPool.java b/hutool-core/src/main/java/cn/hutool/core/text/StrPool.java new file mode 100644 index 000000000..2a90f7879 --- /dev/null +++ b/hutool-core/src/main/java/cn/hutool/core/text/StrPool.java @@ -0,0 +1,211 @@ +package cn.hutool.core.text; + +import cn.hutool.core.util.XmlUtil; + +/** + * 常用字符串常量定义 + * + * @author looly + * @since 5.6.3 + */ +public interface StrPool { + + /** + * 字符常量:空格符 {@code ' '} + */ + char C_SPACE = CharPool.SPACE; + + /** + * 字符常量:制表符 {@code '\t'} + */ + char C_TAB = CharPool.TAB; + + /** + * 字符常量:点 {@code '.'} + */ + char C_DOT = CharPool.DOT; + + /** + * 字符常量:斜杠 {@code '/'} + */ + char C_SLASH = CharPool.SLASH; + + /** + * 字符常量:反斜杠 {@code '\\'} + */ + char C_BACKSLASH = CharPool.BACKSLASH; + + /** + * 字符常量:回车符 {@code '\r'} + */ + char C_CR = CharPool.CR; + + /** + * 字符常量:换行符 {@code '\n'} + */ + char C_LF = CharPool.LF; + + /** + * 字符常量:下划线 {@code '_'} + */ + char C_UNDERLINE = CharPool.UNDERLINE; + + /** + * 字符常量:逗号 {@code ','} + */ + char C_COMMA = CharPool.COMMA; + + /** + * 字符常量:花括号(左) '{' + */ + char C_DELIM_START = CharPool.DELIM_START; + + /** + * 字符常量:花括号(右) '}' + */ + char C_DELIM_END = CharPool.DELIM_END; + + /** + * 字符常量:中括号(左) {@code '['} + */ + char C_BRACKET_START = CharPool.BRACKET_START; + + /** + * 字符常量:中括号(右) {@code ']'} + */ + char C_BRACKET_END = CharPool.BRACKET_END; + + /** + * 字符常量:冒号 {@code ':'} + */ + char C_COLON = CharPool.COLON; + + /** + * 字符常量:艾特 {@code '@'} + */ + char C_AT = CharPool.AT; + + /** + * 字符串常量:制表符 {@code "\t"} + */ + String TAB = " "; + + /** + * 字符串常量:点 {@code "."} + */ + String DOT = "."; + + /** + * 字符串常量:双点 {@code ".."}
+ * 用途:作为指向上级文件夹的路径,如:{@code "../path"} + */ + String DOUBLE_DOT = ".."; + + /** + * 字符串常量:斜杠 {@code "/"} + */ + String SLASH = "/"; + + /** + * 字符串常量:反斜杠 {@code "\\"} + */ + String BACKSLASH = "\\"; + + /** + * 字符串常量:回车符 {@code "\r"}
+ * 解释:该字符常用于表示 Linux 系统和 MacOS 系统下的文本换行 + */ + String CR = "\r"; + + /** + * 字符串常量:换行符 {@code "\n"} + */ + String LF = "\n"; + + /** + * 字符串常量:Windows 换行 {@code "\r\n"}
+ * 解释:该字符串常用于表示 Windows 系统下的文本换行 + */ + String CRLF = "\r\n"; + + /** + * 字符串常量:下划线 {@code "_"} + */ + String UNDERLINE = "_"; + + /** + * 字符串常量:减号(连接符) {@code "-"} + */ + String DASHED = "-"; + + /** + * 字符串常量:逗号 {@code ","} + */ + String COMMA = ","; + + /** + * 字符串常量:花括号(左) "{" + */ + String DELIM_START = "{"; + + /** + * 字符串常量:花括号(右) "}" + */ + String DELIM_END = "}"; + + /** + * 字符串常量:中括号(左) {@code "["} + */ + String BRACKET_START = "["; + + /** + * 字符串常量:中括号(右) {@code "]"} + */ + String BRACKET_END = "]"; + + /** + * 字符串常量:冒号 {@code ":"} + */ + String COLON = ":"; + + /** + * 字符串常量:艾特 {@code "@"} + */ + String AT = "@"; + + + /** + * 字符串常量:HTML 空格转义 {@code " " -> " "} + */ + String HTML_NBSP = XmlUtil.NBSP; + + /** + * 字符串常量:HTML And 符转义 {@code "&" -> "&"} + */ + String HTML_AMP = XmlUtil.AMP; + + /** + * 字符串常量:HTML 双引号转义 {@code """ -> "\""} + */ + String HTML_QUOTE = XmlUtil.QUOTE; + + /** + * 字符串常量:HTML 单引号转义 {@code "&apos" -> "'"} + */ + String HTML_APOS = XmlUtil.APOS; + + /** + * 字符串常量:HTML 小于号转义 {@code "<" -> "<"} + */ + String HTML_LT = XmlUtil.LT; + + /** + * 字符串常量:HTML 大于号转义 {@code ">" -> ">"} + */ + String HTML_GT = XmlUtil.GT; + + /** + * 字符串常量:空 JSON {@code "{}"} + */ + String EMPTY_JSON = "{}"; +} diff --git a/hutool-core/src/main/java/cn/hutool/core/util/CharUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/CharUtil.java index 17f5aebf1..802ceda47 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/CharUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/CharUtil.java @@ -1,6 +1,7 @@ package cn.hutool.core.util; import cn.hutool.core.text.ASCIIStrCache; +import cn.hutool.core.text.CharPool; /** * 字符工具类
@@ -9,84 +10,7 @@ import cn.hutool.core.text.ASCIIStrCache; * @author looly * @since 4.0.1 */ -public class CharUtil { - - /** - * 字符常量:空格符 {@code ' '} - */ - public static final char SPACE = ' '; - /** - * 字符常量:制表符 {@code '\t'} - */ - public static final char TAB = ' '; - /** - * 字符常量:点 {@code '.'} - */ - public static final char DOT = '.'; - /** - * 字符常量:斜杠 {@code '/'} - */ - public static final char SLASH = '/'; - /** - * 字符常量:反斜杠 {@code '\\'} - */ - public static final char BACKSLASH = '\\'; - /** - * 字符常量:回车符 {@code '\r'} - */ - public static final char CR = '\r'; - /** - * 字符常量:换行符 {@code '\n'} - */ - public static final char LF = '\n'; - /** - * 字符常量:减号(连接符) {@code '-'} - */ - public static final char DASHED = '-'; - /** - * 字符常量:下划线 {@code '_'} - */ - public static final char UNDERLINE = '_'; - /** - * 字符常量:逗号 {@code ','} - */ - public static final char COMMA = ','; - /** - * 字符常量:花括号(左) '{' - */ - public static final char DELIM_START = '{'; - /** - * 字符常量:花括号(右) '}' - */ - public static final char DELIM_END = '}'; - /** - * 字符常量:中括号(左) {@code '['} - */ - public static final char BRACKET_START = '['; - /** - * 字符常量:中括号(右) {@code ']'} - */ - public static final char BRACKET_END = ']'; - /** - * 字符常量:双引号 {@code '"'} - */ - public static final char DOUBLE_QUOTES = '"'; - /** - * 字符常量:单引号 {@code '\''} - */ - public static final char SINGLE_QUOTE = '\''; - /** - * 字符常量:与 {@code '&'} - */ - public static final char AMP = '&'; - /** - * 字符常量:冒号 {@code ':'} - */ - public static final char COLON = ':'; - /** - * 字符常量:艾特 {@code '@'} - */ - public static final char AT = '@'; +public class CharUtil implements CharPool { /** * 是否为ASCII字符,ASCII字符位于0~127之间 diff --git a/hutool-core/src/main/java/cn/hutool/core/util/ModifierUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/ModifierUtil.java index 669b0980a..f2b3f389f 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/ModifierUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/ModifierUtil.java @@ -193,6 +193,39 @@ public class ModifierUtil { return hasModifier(clazz, ModifierType.STATIC); } + /** + * 是否是合成字段(由java编译器生成的) + * + * @param field 字段 + * @return 是否是合成字段 + * @since 5.6.3 + */ + public static boolean isSynthetic(Field field) { + return field.isSynthetic(); + } + + /** + * 是否是合成方法(由java编译器生成的) + * + * @param method 方法 + * @return 是否是合成方法 + * @since 5.6.3 + */ + public static boolean isSynthetic(Method method) { + return method.isSynthetic(); + } + + /** + * 是否是合成类(由java编译器生成的) + * + * @param clazz 类 + * @return 是否是合成 + * @since 5.6.3 + */ + public static boolean isSynthetic(Class clazz) { + return clazz.isSynthetic(); + } + //-------------------------------------------------------------------------------------------------------- Private method start /** * 多个修饰符做“与”操作,表示同时存在多个修饰符 diff --git a/hutool-core/src/main/java/cn/hutool/core/util/StrUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/StrUtil.java index 91e4b9fe7..f01ac7601 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/StrUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/StrUtil.java @@ -2,6 +2,7 @@ package cn.hutool.core.util; import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.text.StrBuilder; +import cn.hutool.core.text.StrPool; import cn.hutool.core.text.TextSimilarity; import java.io.StringReader; @@ -15,207 +16,7 @@ import java.util.Map; * * @author xiaoleilu */ -public class StrUtil extends CharSequenceUtil { - - /** - * 字符常量:空格符 {@code ' '} - */ - public static final char C_SPACE = CharUtil.SPACE; - - /** - * 字符常量:制表符 {@code '\t'} - */ - public static final char C_TAB = CharUtil.TAB; - - /** - * 字符常量:点 {@code '.'} - */ - public static final char C_DOT = CharUtil.DOT; - - /** - * 字符常量:斜杠 {@code '/'} - */ - public static final char C_SLASH = CharUtil.SLASH; - - /** - * 字符常量:反斜杠 {@code '\\'} - */ - public static final char C_BACKSLASH = CharUtil.BACKSLASH; - - /** - * 字符常量:回车符 {@code '\r'} - */ - public static final char C_CR = CharUtil.CR; - - /** - * 字符常量:换行符 {@code '\n'} - */ - public static final char C_LF = CharUtil.LF; - - /** - * 字符常量:下划线 {@code '_'} - */ - public static final char C_UNDERLINE = CharUtil.UNDERLINE; - - /** - * 字符常量:逗号 {@code ','} - */ - public static final char C_COMMA = CharUtil.COMMA; - - /** - * 字符常量:花括号(左) '{' - */ - public static final char C_DELIM_START = CharUtil.DELIM_START; - - /** - * 字符常量:花括号(右) '}' - */ - public static final char C_DELIM_END = CharUtil.DELIM_END; - - /** - * 字符常量:中括号(左) {@code '['} - */ - public static final char C_BRACKET_START = CharUtil.BRACKET_START; - - /** - * 字符常量:中括号(右) {@code ']'} - */ - public static final char C_BRACKET_END = CharUtil.BRACKET_END; - - /** - * 字符常量:冒号 {@code ':'} - */ - public static final char C_COLON = CharUtil.COLON; - - /** - * 字符常量:艾特 {@code '@'} - */ - public static final char C_AT = CharUtil.AT; - - - /** - * 字符串常量:制表符 {@code "\t"} - */ - public static final String TAB = " "; - - /** - * 字符串常量:点 {@code "."} - */ - public static final String DOT = "."; - - /** - * 字符串常量:双点 {@code ".."}
- * 用途:作为指向上级文件夹的路径,如:{@code "../path"} - */ - public static final String DOUBLE_DOT = ".."; - - /** - * 字符串常量:斜杠 {@code "/"} - */ - public static final String SLASH = "/"; - - /** - * 字符串常量:反斜杠 {@code "\\"} - */ - public static final String BACKSLASH = "\\"; - - /** - * 字符串常量:回车符 {@code "\r"}
- * 解释:该字符常用于表示 Linux 系统和 MacOS 系统下的文本换行 - */ - public static final String CR = "\r"; - - /** - * 字符串常量:换行符 {@code "\n"} - */ - public static final String LF = "\n"; - - /** - * 字符串常量:Windows 换行 {@code "\r\n"}
- * 解释:该字符串常用于表示 Windows 系统下的文本换行 - */ - public static final String CRLF = "\r\n"; - - /** - * 字符串常量:下划线 {@code "_"} - */ - public static final String UNDERLINE = "_"; - - /** - * 字符串常量:减号(连接符) {@code "-"} - */ - public static final String DASHED = "-"; - - /** - * 字符串常量:逗号 {@code ","} - */ - public static final String COMMA = ","; - - /** - * 字符串常量:花括号(左) "{" - */ - public static final String DELIM_START = "{"; - - /** - * 字符串常量:花括号(右) "}" - */ - public static final String DELIM_END = "}"; - - /** - * 字符串常量:中括号(左) {@code "["} - */ - public static final String BRACKET_START = "["; - - /** - * 字符串常量:中括号(右) {@code "]"} - */ - public static final String BRACKET_END = "]"; - - /** - * 字符串常量:冒号 {@code ":"} - */ - public static final String COLON = ":"; - - /** - * 字符串常量:艾特 {@code "@"} - */ - public static final String AT = "@"; - - - /** - * 字符串常量:HTML 空格转义 {@code " " -> " "} - */ - public static final String HTML_NBSP = XmlUtil.NBSP; - - /** - * 字符串常量:HTML And 符转义 {@code "&" -> "&"} - */ - public static final String HTML_AMP = XmlUtil.AMP; - - /** - * 字符串常量:HTML 双引号转义 {@code """ -> "\""} - */ - public static final String HTML_QUOTE = XmlUtil.QUOTE; - - /** - * 字符串常量:HTML 单引号转义 {@code "&apos" -> "'"} - */ - public static final String HTML_APOS = XmlUtil.APOS; - - /** - * 字符串常量:HTML 小于号转义 {@code "<" -> "<"} - */ - public static final String HTML_LT = XmlUtil.LT; - - /** - * 字符串常量:HTML 大于号转义 {@code ">" -> ">"} - */ - public static final String HTML_GT = XmlUtil.GT; - - /** - * 字符串常量:空 JSON {@code "{}"} - */ - public static final String EMPTY_JSON = "{}"; +public class StrUtil extends CharSequenceUtil implements StrPool { // ------------------------------------------------------------------------ Blank diff --git a/hutool-core/src/test/java/cn/hutool/core/lang/func/LambdaUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/lang/func/LambdaUtilTest.java new file mode 100644 index 000000000..ff6f260cb --- /dev/null +++ b/hutool-core/src/test/java/cn/hutool/core/lang/func/LambdaUtilTest.java @@ -0,0 +1,19 @@ +package cn.hutool.core.lang.func; + +import lombok.Data; +import org.junit.Assert; +import org.junit.Test; + +public class LambdaUtilTest { + + @Test + public void getMethodNameTest(){ + String methodName = LambdaUtil.getMethodName(MyTeacher::getAge); + Assert.assertEquals("getAge", methodName); + } + + @Data + static class MyTeacher{ + public String age; + } +}