diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/convert/RegisterConverter.java b/hutool-core/src/main/java/org/dromara/hutool/core/convert/RegisterConverter.java index d12378389..26a12b0bb 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/convert/RegisterConverter.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/convert/RegisterConverter.java @@ -17,6 +17,7 @@ import org.dromara.hutool.core.date.DateTime; import org.dromara.hutool.core.lang.Opt; import org.dromara.hutool.core.lang.tuple.Pair; import org.dromara.hutool.core.lang.tuple.Triple; +import org.dromara.hutool.core.lang.tuple.Tuple; import org.dromara.hutool.core.map.SafeConcurrentHashMap; import org.dromara.hutool.core.reflect.TypeUtil; @@ -219,5 +220,6 @@ public class RegisterConverter implements Converter, Serializable { defaultConverterMap.put(Opt.class, new OptConverter());// since 5.7.16 defaultConverterMap.put(Pair.class, PairConverter.INSTANCE);// since 6.0.0 defaultConverterMap.put(Triple.class, TripleConverter.INSTANCE);// since 6.0.0 + defaultConverterMap.put(Tuple.class, TupleConverter.INSTANCE);// since 6.0.0 } } diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/convert/impl/TupleConverter.java b/hutool-core/src/main/java/org/dromara/hutool/core/convert/impl/TupleConverter.java new file mode 100755 index 000000000..b0ece7102 --- /dev/null +++ b/hutool-core/src/main/java/org/dromara/hutool/core/convert/impl/TupleConverter.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2023 looly(loolly@aliyun.com) + * Hutool is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * http://license.coscl.org.cn/MulanPSL2 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ + +package org.dromara.hutool.core.convert.impl; + +import org.dromara.hutool.core.convert.ConvertException; +import org.dromara.hutool.core.convert.Converter; +import org.dromara.hutool.core.lang.tuple.Tuple; + +import java.lang.reflect.Type; + +/** + * {@link Tuple}转换器 + * + * @author looly + * @since 6.0.0 + */ +public class TupleConverter implements Converter { + + /** + * 单例 + */ + public static final TupleConverter INSTANCE = new TupleConverter(); + + @Override + public Object convert(final Type targetType, final Object value) throws ConvertException { + final Object[] convert = (Object[]) ArrayConverter.INSTANCE.convert(Object[].class, value); + return Tuple.of(convert); + } +} diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/lang/tuple/Triple.java b/hutool-core/src/main/java/org/dromara/hutool/core/lang/tuple/Triple.java index 3f4717578..6d1982fdf 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/lang/tuple/Triple.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/lang/tuple/Triple.java @@ -26,8 +26,6 @@ import java.util.Objects; public class Triple extends Pair { private static final long serialVersionUID = 1L; - protected M middle; - /** * 构建Triple对象 * @@ -44,6 +42,8 @@ public class Triple extends Pair { return new Triple<>(left, middle, right); } + protected M middle; + /** * 构造 * diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/lang/tuple/Tuple.java b/hutool-core/src/main/java/org/dromara/hutool/core/lang/tuple/Tuple.java index 47a8465a4..9f5469552 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/lang/tuple/Tuple.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/lang/tuple/Tuple.java @@ -35,6 +35,17 @@ import java.util.stream.StreamSupport; public class Tuple implements Iterable, Serializable, Cloneable { private static final long serialVersionUID = -7689304393482182157L; + /** + * 构建Tuple对象 + * + * @param members 成员数组 + * @return Tuple + * @since 6.0.0 + */ + public static Tuple of(final Object... members) { + return new Tuple(members); + } + private final Object[] members; private int hashCode; private boolean cacheHash; diff --git a/hutool-json/src/test/java/org/dromara/hutool/json/IssueI7GPGXTest.java b/hutool-json/src/test/java/org/dromara/hutool/json/IssueI7GPGXTest.java index 7de290e71..4e9343670 100755 --- a/hutool-json/src/test/java/org/dromara/hutool/json/IssueI7GPGXTest.java +++ b/hutool-json/src/test/java/org/dromara/hutool/json/IssueI7GPGXTest.java @@ -12,8 +12,10 @@ package org.dromara.hutool.json; +import org.dromara.hutool.core.lang.Console; import org.dromara.hutool.core.lang.tuple.Pair; import org.dromara.hutool.core.lang.tuple.Triple; +import org.dromara.hutool.core.lang.tuple.Tuple; import org.dromara.hutool.core.reflect.TypeReference; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -34,4 +36,12 @@ public class IssueI7GPGXTest { final Triple pair = JSONUtil.toBean(a, new TypeReference>() {}); Assertions.assertEquals(hutoolTriple, pair); } + + @Test + void tupleToBeanTest() { + final Tuple hutoolTriple = Tuple.of("aaa", 123, true); + final String a = JSONUtil.toJsonStr(hutoolTriple); + final Tuple pair = JSONUtil.toBean(a, Tuple.class); + Assertions.assertEquals(hutoolTriple, pair); + } }