All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.bingoohuang.utils.proxy.Adapter Maven / Gradle / Ivy

package com.github.bingoohuang.utils.proxy;

import lombok.SneakyThrows;
import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;

import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class Adapter {
    @SuppressWarnings("unchecked")
    public static  T adapt(Object obj, Class target) {
        return (T) (target.isAssignableFrom(obj.getClass())
                ? obj
                : target.isInterface()

                ? Proxy.newProxyInstance(target.getClassLoader(), new Class[]{target}, (p, m, args) -> adapt(obj, m, args))
                : Enhancer.create(target, new Class[]{}, (MethodInterceptor) (o, m, args, p) -> adapt(obj, m, args)));
    }

    @SneakyThrows
    public static Object adapt(Object obj, Method adapted, Object[] args) {
        return findAdapted(obj, adapted).invoke(obj, args);
    }

    @SneakyThrows
    public static Method findAdapted(Object obj, Method adapted) {
        return obj.getClass().getMethod(adapted.getName(), adapted.getParameterTypes());
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy