From 80239e2f27b5b8d426d87205210a21e5a43f5600 Mon Sep 17 00:00:00 2001
From: hzd <2065413046@qq.com>
Date: Thu, 3 Sep 2020 15:48:43 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=9E=9A=E4=B8=BE=E8=BD=AC?=
=?UTF-8?q?=E6=8D=A2=E6=96=B9=E5=BC=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/cn/hutool/core/convert/EnumItem.java | 64 +++++++++++++++++++
.../core/convert/impl/EnumConverter.java | 59 +++++++++++------
2 files changed, 103 insertions(+), 20 deletions(-)
create mode 100644 hutool-core/src/main/java/cn/hutool/core/convert/EnumItem.java
diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/EnumItem.java b/hutool-core/src/main/java/cn/hutool/core/convert/EnumItem.java
new file mode 100644
index 000000000..f620f6ea8
--- /dev/null
+++ b/hutool-core/src/main/java/cn/hutool/core/convert/EnumItem.java
@@ -0,0 +1,64 @@
+package cn.hutool.core.convert;
+
+import java.io.Serializable;
+
+/**
+ *
+ *枚举元素通用接口,在自定义枚举上实现此接口可以用于数据转换
+ *数据库保存时建议保存 intVal()而非ordinal()防备需求变更
+ * @param
+ */
+public interface EnumItem> extends Serializable{
+
+ String name();
+ /**
+ * 在中文语境下,多数时间枚举会配合一个中文说明
+ */
+ default String text() {
+ return name();
+ }
+
+ int intVal();
+
+ @SuppressWarnings("unchecked")
+ default E[] items() {
+ return (E[]) this.getClass().getEnumConstants();
+ }
+ /**
+ * 通过int类型值查找兄弟其他枚举
+ * @param intVal
+ * @return
+ */
+ default E fromInt(Integer intVal) {
+ if(intVal==null) {
+ return null;
+ }
+ E[] vs = items();
+ for (E enumItem : vs) {
+ if(enumItem.intVal()==intVal.intValue()) {
+ return enumItem;
+ }
+ }
+ return null;
+ }
+ /**
+ * 通过String类型的值转换,根据实现可以用name/text
+ * @param intVal
+ * @return
+ */
+ default E fromStr(String strVal) {
+ if(strVal==null) {
+ return null;
+ }
+ E[] vs = items();
+ for (E enumItem : vs) {
+ if(strVal.equalsIgnoreCase(enumItem.name())) {
+ return enumItem;
+ }
+ }
+ return null;
+ }
+
+
+}
+
diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/impl/EnumConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/impl/EnumConverter.java
index 292dc04c4..634222ecf 100644
--- a/hutool-core/src/main/java/cn/hutool/core/convert/impl/EnumConverter.java
+++ b/hutool-core/src/main/java/cn/hutool/core/convert/impl/EnumConverter.java
@@ -1,6 +1,7 @@
package cn.hutool.core.convert.impl;
import cn.hutool.core.convert.AbstractConverter;
+import cn.hutool.core.convert.EnumItem;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ClassUtil;
import cn.hutool.core.util.EnumUtil;
@@ -52,37 +53,55 @@ public class EnumConverter extends AbstractConverter