mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-07-21 15:09:48 +08:00
fix code
This commit is contained in:
@@ -454,7 +454,6 @@ public class BeanUtil {
|
||||
* @param ignoreProperties 不拷贝的的属性列表
|
||||
* @return 目标对象
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public static <T> T copyProperties(final Object source, final Class<T> tClass, final String... ignoreProperties) {
|
||||
if (null == source) {
|
||||
return null;
|
||||
@@ -462,7 +461,7 @@ public class BeanUtil {
|
||||
if (RecordUtil.isRecord(tClass)) {
|
||||
// issue#I7EO3U
|
||||
// 转换record时,ignoreProperties无效
|
||||
return (T) RecordConverter.INSTANCE.convert(tClass, source);
|
||||
return RecordConverter.INSTANCE.convert(tClass, source);
|
||||
}
|
||||
final T target = ConstructorUtil.newInstanceIfPossible(tClass);
|
||||
return copyProperties(source, target, CopyOptions.of().setIgnoreProperties(ignoreProperties));
|
||||
|
@@ -1955,7 +1955,7 @@ public class CollUtil {
|
||||
* @param consumer {@link SerBiConsumer} 遍历的每条数据处理器
|
||||
* @since 5.4.7
|
||||
*/
|
||||
public static <T> void forEach(final Iterable<T> iterable, final SerBiConsumer<T, Integer> consumer) {
|
||||
public static <T> void forEach(final Iterable<T> iterable, final SerBiConsumer<Integer, T> consumer) {
|
||||
if (iterable == null) {
|
||||
return;
|
||||
}
|
||||
@@ -1969,13 +1969,13 @@ public class CollUtil {
|
||||
* @param iterator {@link Iterator}
|
||||
* @param consumer {@link SerBiConsumer} 遍历的每条数据处理器
|
||||
*/
|
||||
public static <T> void forEach(final Iterator<T> iterator, final SerBiConsumer<T, Integer> consumer) {
|
||||
public static <T> void forEach(final Iterator<T> iterator, final SerBiConsumer<Integer, T> consumer) {
|
||||
if (iterator == null) {
|
||||
return;
|
||||
}
|
||||
int index = 0;
|
||||
while (iterator.hasNext()) {
|
||||
consumer.accept(iterator.next(), index);
|
||||
consumer.accept(index, iterator.next());
|
||||
index++;
|
||||
}
|
||||
}
|
||||
@@ -1987,13 +1987,13 @@ public class CollUtil {
|
||||
* @param enumeration {@link Enumeration}
|
||||
* @param consumer {@link SerBiConsumer} 遍历的每条数据处理器
|
||||
*/
|
||||
public static <T> void forEach(final Enumeration<T> enumeration, final SerBiConsumer<T, Integer> consumer) {
|
||||
public static <T> void forEach(final Enumeration<T> enumeration, final SerBiConsumer<Integer, T> consumer) {
|
||||
if (enumeration == null) {
|
||||
return;
|
||||
}
|
||||
int index = 0;
|
||||
while (enumeration.hasMoreElements()) {
|
||||
consumer.accept(enumeration.nextElement(), index);
|
||||
consumer.accept(index, enumeration.nextElement());
|
||||
index++;
|
||||
}
|
||||
}
|
||||
@@ -2007,13 +2007,13 @@ public class CollUtil {
|
||||
* @param map {@link Map}
|
||||
* @param kvConsumer {@link SerConsumer3} 遍历的每条数据处理器
|
||||
*/
|
||||
public static <K, V> void forEach(final Map<K, V> map, final SerConsumer3<K, V, Integer> kvConsumer) {
|
||||
public static <K, V> void forEach(final Map<K, V> map, final SerConsumer3<Integer, K, V> kvConsumer) {
|
||||
if (map == null) {
|
||||
return;
|
||||
}
|
||||
int index = 0;
|
||||
for (final Entry<K, V> entry : map.entrySet()) {
|
||||
kvConsumer.accept(entry.getKey(), entry.getValue(), index);
|
||||
kvConsumer.accept(index, entry.getKey(), entry.getValue());
|
||||
index++;
|
||||
}
|
||||
}
|
||||
|
@@ -191,4 +191,21 @@ public class ListWrapper<E> extends SimpleWrapper<List<E>> implements List<E> {
|
||||
public Stream<E> parallelStream() {
|
||||
return raw.parallelStream();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return this.raw.hashCode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(final Object obj) {
|
||||
if (this == obj) {
|
||||
return true;
|
||||
}
|
||||
if (obj == null || getClass() != obj.getClass()) {
|
||||
return false;
|
||||
}
|
||||
final ListWrapper<?> that = (ListWrapper<?>) obj;
|
||||
return Objects.equals(raw, that.raw);
|
||||
}
|
||||
}
|
||||
|
@@ -561,10 +561,9 @@ public class ConvertUtil {
|
||||
* @param defaultValue 默认值
|
||||
* @return Enum
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public static <E extends Enum<E>> E toEnum(final Class<E> clazz, final Object value, final E defaultValue) {
|
||||
try {
|
||||
return (E) EnumConverter.INSTANCE.convert(clazz, value);
|
||||
return EnumConverter.INSTANCE.convert(clazz, value);
|
||||
} catch (final Exception ignore) {
|
||||
return defaultValue;
|
||||
}
|
||||
|
@@ -40,6 +40,21 @@ public interface Converter {
|
||||
*/
|
||||
Object convert(Type targetType, Object value) throws ConvertException;
|
||||
|
||||
/**
|
||||
* 转换为指定类型<br>
|
||||
* 如果类型无法确定,将读取默认值的类型做为目标类型
|
||||
*
|
||||
* @param <T> 目标类型
|
||||
* @param targetType 目标类型
|
||||
* @param value 原始值,如果对象实现了此接口,则value为this
|
||||
* @return 转换后的值
|
||||
* @throws ConvertException 转换无法正常完成或转换异常时抛出此异常
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
default <T> T convert(final Class<T> targetType, final Object value) throws ConvertException {
|
||||
return (T) convert((Type) targetType, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* 转换值为指定类型,可选是否不抛异常转换<br>
|
||||
* 当转换失败时返回默认值
|
||||
@@ -57,9 +72,10 @@ public interface Converter {
|
||||
|
||||
/**
|
||||
* 返回原值的转换器,不做转换
|
||||
*
|
||||
* @return Converter
|
||||
*/
|
||||
static Converter identity(){
|
||||
static Converter identity() {
|
||||
return (targetType, value) -> value;
|
||||
}
|
||||
}
|
||||
|
@@ -37,7 +37,7 @@ public class TupleConverter implements Converter {
|
||||
|
||||
@Override
|
||||
public Object convert(final Type targetType, final Object value) throws ConvertException {
|
||||
final Object[] convert = (Object[]) ArrayConverter.INSTANCE.convert(Object[].class, value);
|
||||
final Object[] convert = ArrayConverter.INSTANCE.convert(Object[].class, value);
|
||||
return Tuple.of(convert);
|
||||
}
|
||||
}
|
||||
|
@@ -321,7 +321,7 @@ public class CollUtilTest {
|
||||
|
||||
final String[] result = new String[1];
|
||||
final String a = "a";
|
||||
CollUtil.forEach(map, (key, value, index) -> {
|
||||
CollUtil.forEach(map, (index, key, value) -> {
|
||||
if (a.equals(key)) {
|
||||
result[0] = value;
|
||||
}
|
||||
|
@@ -32,7 +32,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||
public class CompositeConverterTest {
|
||||
@Test
|
||||
void convertEmptyTest() {
|
||||
final Object convert = CompositeConverter.getInstance().convert(EmptyBean.class, "");
|
||||
final EmptyBean convert = CompositeConverter.getInstance().convert(EmptyBean.class, "");
|
||||
assertNotNull(convert);
|
||||
assertEquals(new EmptyBean(), convert);
|
||||
}
|
||||
@@ -45,13 +45,13 @@ public class CompositeConverterTest {
|
||||
final int a = 454553;
|
||||
final CompositeConverter compositeConverter = CompositeConverter.getInstance();
|
||||
|
||||
CharSequence result = (CharSequence) compositeConverter.convert(CharSequence.class, a);
|
||||
CharSequence result = compositeConverter.convert(CharSequence.class, a);
|
||||
assertEquals("454553", result);
|
||||
|
||||
//此处做为示例自定义CharSequence转换,因为Hutool中已经提供CharSequence转换,请尽量不要替换
|
||||
//替换可能引发关联转换异常(例如覆盖CharSequence转换会影响全局)
|
||||
compositeConverter.register(CharSequence.class, new CustomConverter());
|
||||
result = (CharSequence) compositeConverter.convert(CharSequence.class, a);
|
||||
result = compositeConverter.convert(CharSequence.class, a);
|
||||
assertEquals("Custom: 454553", result);
|
||||
}
|
||||
|
||||
|
@@ -131,28 +131,28 @@ public class ConvertTest {
|
||||
final String a = " 34232";
|
||||
final Integer aInteger = ConvertUtil.toInt(a);
|
||||
assertEquals(Integer.valueOf(34232), aInteger);
|
||||
final int aInt = (int) CompositeConverter.getInstance().convert(int.class, a);
|
||||
final int aInt = CompositeConverter.getInstance().convert(int.class, a);
|
||||
assertEquals(34232, aInt);
|
||||
|
||||
// 带小数测试
|
||||
final String b = " 34232.00";
|
||||
final Integer bInteger = ConvertUtil.toInt(b);
|
||||
assertEquals(Integer.valueOf(34232), bInteger);
|
||||
final int bInt = (int) CompositeConverter.getInstance().convert(int.class, b);
|
||||
final int bInt = CompositeConverter.getInstance().convert(int.class, b);
|
||||
assertEquals(34232, bInt);
|
||||
|
||||
// boolean测试
|
||||
final boolean c = true;
|
||||
final Integer cInteger = ConvertUtil.toInt(c);
|
||||
assertEquals(Integer.valueOf(1), cInteger);
|
||||
final int cInt = (int) CompositeConverter.getInstance().convert(int.class, c);
|
||||
final int cInt = CompositeConverter.getInstance().convert(int.class, c);
|
||||
assertEquals(1, cInt);
|
||||
|
||||
// boolean测试
|
||||
final String d = "08";
|
||||
final Integer dInteger = ConvertUtil.toInt(d);
|
||||
assertEquals(Integer.valueOf(8), dInteger);
|
||||
final int dInt = (int) CompositeConverter.getInstance().convert(int.class, d);
|
||||
final int dInt = CompositeConverter.getInstance().convert(int.class, d);
|
||||
assertEquals(8, dInt);
|
||||
}
|
||||
|
||||
@@ -176,28 +176,28 @@ public class ConvertTest {
|
||||
final String a = " 342324545435435";
|
||||
final Long aLong = ConvertUtil.toLong(a);
|
||||
assertEquals(Long.valueOf(342324545435435L), aLong);
|
||||
final long aLong2 = (long) CompositeConverter.getInstance().convert(long.class, a);
|
||||
final long aLong2 = CompositeConverter.getInstance().convert(long.class, a);
|
||||
assertEquals(342324545435435L, aLong2);
|
||||
|
||||
// 带小数测试
|
||||
final String b = " 342324545435435.245435435";
|
||||
final Long bLong = ConvertUtil.toLong(b);
|
||||
assertEquals(Long.valueOf(342324545435435L), bLong);
|
||||
final long bLong2 = (long) CompositeConverter.getInstance().convert(long.class, b);
|
||||
final long bLong2 = CompositeConverter.getInstance().convert(long.class, b);
|
||||
assertEquals(342324545435435L, bLong2);
|
||||
|
||||
// boolean测试
|
||||
final boolean c = true;
|
||||
final Long cLong = ConvertUtil.toLong(c);
|
||||
assertEquals(Long.valueOf(1), cLong);
|
||||
final long cLong2 = (long) CompositeConverter.getInstance().convert(long.class, c);
|
||||
final long cLong2 = CompositeConverter.getInstance().convert(long.class, c);
|
||||
assertEquals(1, cLong2);
|
||||
|
||||
// boolean测试
|
||||
final String d = "08";
|
||||
final Long dLong = ConvertUtil.toLong(d);
|
||||
assertEquals(Long.valueOf(8), dLong);
|
||||
final long dLong2 = (long) CompositeConverter.getInstance().convert(long.class, d);
|
||||
final long dLong2 = CompositeConverter.getInstance().convert(long.class, d);
|
||||
assertEquals(8, dLong2);
|
||||
}
|
||||
|
||||
|
@@ -95,11 +95,11 @@ public class ConvertToArrayTest {
|
||||
|
||||
//数组转数组测试
|
||||
final int[] a = new int[]{1,2,3,4};
|
||||
final long[] result = (long[]) CompositeConverter.getInstance().convert(long[].class, a);
|
||||
final long[] result = CompositeConverter.getInstance().convert(long[].class, a);
|
||||
Assertions.assertArrayEquals(new long[]{1L, 2L, 3L, 4L}, result);
|
||||
|
||||
//数组转数组测试
|
||||
final byte[] resultBytes = (byte[]) CompositeConverter.getInstance().convert(byte[].class, a);
|
||||
final byte[] resultBytes = CompositeConverter.getInstance().convert(byte[].class, a);
|
||||
Assertions.assertArrayEquals(new byte[]{1, 2, 3, 4}, resultBytes);
|
||||
|
||||
//字符串转数组
|
||||
|
@@ -31,7 +31,7 @@ public class EntryConvertTest {
|
||||
final KVBean kvBean = new KVBean();
|
||||
kvBean.setKey("a");
|
||||
kvBean.setValue(1);
|
||||
final AbstractMap.SimpleEntry<?, ?> entry = (AbstractMap.SimpleEntry<?, ?>) CompositeConverter.getInstance()
|
||||
final AbstractMap.SimpleEntry<?, ?> entry = CompositeConverter.getInstance()
|
||||
.convert(AbstractMap.SimpleEntry.class, kvBean);
|
||||
|
||||
Assertions.assertEquals("a", entry.getKey());
|
||||
@@ -42,7 +42,7 @@ public class EntryConvertTest {
|
||||
void beanToEntryTest2() {
|
||||
final SingleBean bean = new SingleBean();
|
||||
bean.setA("1");
|
||||
final AbstractMap.SimpleEntry<?, ?> entry = (AbstractMap.SimpleEntry<?, ?>) CompositeConverter.getInstance()
|
||||
final AbstractMap.SimpleEntry<?, ?> entry = CompositeConverter.getInstance()
|
||||
.convert(AbstractMap.SimpleEntry.class, bean);
|
||||
|
||||
Assertions.assertEquals("a", entry.getKey());
|
||||
@@ -53,7 +53,7 @@ public class EntryConvertTest {
|
||||
void mapToEntryTest() {
|
||||
final Map<String, Integer> bean = new HashMap<>();
|
||||
bean.put("a", 1);
|
||||
final AbstractMap.SimpleEntry<?, ?> entry = (AbstractMap.SimpleEntry<?, ?>) CompositeConverter.getInstance()
|
||||
final AbstractMap.SimpleEntry<?, ?> entry = CompositeConverter.getInstance()
|
||||
.convert(AbstractMap.SimpleEntry.class, bean);
|
||||
|
||||
Assertions.assertEquals("a", entry.getKey());
|
||||
@@ -63,7 +63,7 @@ public class EntryConvertTest {
|
||||
@Test
|
||||
void strToEntryTest() {
|
||||
final String bean = "a=1";
|
||||
final AbstractMap.SimpleEntry<?, ?> entry = (AbstractMap.SimpleEntry<?, ?>) CompositeConverter.getInstance()
|
||||
final AbstractMap.SimpleEntry<?, ?> entry = CompositeConverter.getInstance()
|
||||
.convert(AbstractMap.SimpleEntry.class, bean);
|
||||
|
||||
Assertions.assertEquals("a", entry.getKey());
|
||||
@@ -73,7 +73,7 @@ public class EntryConvertTest {
|
||||
@Test
|
||||
void strToEntryTest2() {
|
||||
final String bean = "a:1";
|
||||
final AbstractMap.SimpleEntry<?, ?> entry = (AbstractMap.SimpleEntry<?, ?>) CompositeConverter.getInstance()
|
||||
final AbstractMap.SimpleEntry<?, ?> entry = CompositeConverter.getInstance()
|
||||
.convert(AbstractMap.SimpleEntry.class, bean);
|
||||
|
||||
Assertions.assertEquals("a", entry.getKey());
|
||||
@@ -83,7 +83,7 @@ public class EntryConvertTest {
|
||||
@Test
|
||||
void strToEntryTest3() {
|
||||
final String bean = "a,1";
|
||||
final AbstractMap.SimpleEntry<?, ?> entry = (AbstractMap.SimpleEntry<?, ?>) CompositeConverter.getInstance()
|
||||
final AbstractMap.SimpleEntry<?, ?> entry = CompositeConverter.getInstance()
|
||||
.convert(AbstractMap.SimpleEntry.class, bean);
|
||||
|
||||
Assertions.assertEquals("a", entry.getKey());
|
||||
|
Reference in New Issue
Block a user