调用图
Client实现
远程接口定义
public interface XxxApi { boolean remoteMethod(); } |
Proxy工厂
public final class ProxyFactory { @SuppressWarnings("unchecked") public <T> T getProxy(Class<T> clz, InvocationHandler invocationHandler) { return (T) Proxy.newProxyInstance(this.getClass().getClassLoader(), new Class[] {clz}, invocationHandler); } } |
函数返回值基本类型的默认值
public final class PrimitiveDefault { private static boolean defaultBoolean; private static char defaultChar; private static byte defaultByte; private static short defaultShort; private static int defaultInt; private static long defaultLong; private static float defaultFloat; private static double defaultDouble; private static Map<Class<?>, Object> primitiveValues = new HashMap<Class<?>, Object>(); static { primitiveValues.put(boolean.class, defaultBoolean); primitiveValues.put(char.class, defaultChar); primitiveValues.put(byte.class, defaultByte); primitiveValues.put(short.class, defaultShort); primitiveValues.put(int.class, defaultInt); primitiveValues.put(long.class, defaultLong); primitiveValues.put(float.class, defaultFloat); primitiveValues.put(double.class, defaultDouble); } public static Object getDefaultReturnValue(Class<?> returnType) { return primitiveValues.get(returnType); } } |
Client调用
public final class Runner { private static final Logger logger = LoggerFactory.getLogger(Runner.class); public static void main(String[] ignore) { ProxyFactory proxyFactory = new ProxyFactory(); XxxApi xxxApi = proxyFactory.getProxy(XxxApi.class, (proxy, method, args) -> { // 判断method是否定义过 todo logger.info("{} {}", method, args); // 产生1个默认值 Class<?> returnType = method.getReturnType(); if (returnType != null && returnType.isPrimitive()) { return PrimitiveDefault.getDefaultReturnValue(returnType); } return null; }); xxxApi.remoteMethod(); } } |