写了个类型转换类

36 阅读1分钟

摸鱼时间写了个简单的Ao转Do的方法类,个人感觉还是蛮好用的。

public class BeanConvertor {
    private static final Map<Class<?>, Constructor<?>> constructorCache = new ConcurrentHashMap<>();

    public static <T, R> R convert(T source, Class<R> targetClass) {
        if (source == null) return null;
        try {
            Constructor<?> constructor = constructorCache.computeIfAbsent(targetClass, clazz -> {
                try {
                    return clazz.getDeclaredConstructor();
                } catch (NoSuchMethodException e) {
                    throw new RuntimeException("类 " + clazz.getName() + " 缺少无参构造函数", e);
                }
            });
            R target = (R) constructor.newInstance();
            BeanUtils.copyProperties(source, target);
            return target;
        } catch (Exception e) {
            throw new RuntimeException("转换失败", e);
        }
    }
}

调用示例如下

// ao是已经有的,现在需要吧AO转为DO
OldPortGateMaintainDo convert = BeanConvertor.convert(gateMaintainAo, OldPortGateMaintainDo.class);

很简单的东西,随便水一下