Add File
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
/*
|
||||
* Copyright (c) 2023-2025, Agents-Flex (fuhai999@gmail.com).
|
||||
* <p>
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
* <p>
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* <p>
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.agentsflex.core.convert;
|
||||
|
||||
import com.agentsflex.core.util.ArrayUtil;
|
||||
import com.agentsflex.core.util.StringUtil;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.BigInteger;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class ConvertService {
|
||||
|
||||
private static final Map<Class<?>, IConverter<?>> CONVERTER_MAP = new HashMap<>();
|
||||
|
||||
static {
|
||||
register(new BooleanConverter(), Boolean.class, boolean.class);
|
||||
register(new IntegerConverter(), Integer.class, int.class);
|
||||
register(new LongConverter(), Long.class, long.class);
|
||||
register(new DoubleConverter(), Double.class, double.class);
|
||||
register(new FloatConverter(), Float.class, float.class);
|
||||
register(new ShortConverter(), Short.class, short.class);
|
||||
|
||||
register(new BigDecimalConverter(), BigDecimal.class);
|
||||
register(new BigIntegerConverter(), BigInteger.class);
|
||||
register(new ByteConverter(), byte.class);
|
||||
register(new ByteArrayConverter(), byte[].class);
|
||||
|
||||
|
||||
}
|
||||
|
||||
private static void register(IConverter<?> converter, Class<?>... classes) {
|
||||
for (Class<?> clazz : classes) {
|
||||
CONVERTER_MAP.put(clazz, converter);
|
||||
}
|
||||
}
|
||||
|
||||
public static Object convert(Object value, Class<?> toType) {
|
||||
if (value == null || (value.getClass() == String.class && StringUtil.noText((String) value)
|
||||
&& toType != String.class)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (value.getClass().isAssignableFrom(toType)) {
|
||||
return value;
|
||||
}
|
||||
|
||||
if (toType == Serializable.class && ArrayUtil.contains(value.getClass().getInterfaces(), Serializable.class)) {
|
||||
return value;
|
||||
}
|
||||
|
||||
String valueString = value.toString().trim();
|
||||
if (valueString.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
IConverter<?> converter = CONVERTER_MAP.get(toType);
|
||||
if (converter != null) {
|
||||
return converter.convert(valueString);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public static Object getPrimitiveDefaultValue(Class<?> paraClass) {
|
||||
if (paraClass == int.class || paraClass == long.class || paraClass == float.class || paraClass == double.class) {
|
||||
return 0;
|
||||
} else if (paraClass == boolean.class) {
|
||||
return Boolean.FALSE;
|
||||
} else if (paraClass == short.class) {
|
||||
return (short) 0;
|
||||
} else if (paraClass == byte.class) {
|
||||
return (byte) 0;
|
||||
} else if (paraClass == char.class) {
|
||||
return '\u0000';
|
||||
} else {
|
||||
//不存在这种类型
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user