add Converter

This commit is contained in:
Looly 2023-06-29 18:00:20 +08:00
parent 887afc8984
commit 77bd2d4336
5 changed files with 64 additions and 2 deletions

View File

@ -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
}
}

View File

@ -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);
}
}

View File

@ -26,8 +26,6 @@ import java.util.Objects;
public class Triple<L, M, R> extends Pair<L, R> {
private static final long serialVersionUID = 1L;
protected M middle;
/**
* 构建Triple对象
*
@ -44,6 +42,8 @@ public class Triple<L, M, R> extends Pair<L, R> {
return new Triple<>(left, middle, right);
}
protected M middle;
/**
* 构造
*

View File

@ -35,6 +35,17 @@ import java.util.stream.StreamSupport;
public class Tuple implements Iterable<Object>, 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;

View File

@ -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<String, Integer, Boolean> pair = JSONUtil.toBean(a, new TypeReference<Triple<String, Integer, Boolean>>() {});
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);
}
}