反射使用
本文作者:程序员飞云
1. 首先先根据相应的类所在的包获取Class
例如我现在有个包com.flySdk.client.FlyApiClient
String classPath = "com.flySdk.client.FlyApiClient"
Class<?> clientClazz = Class.forName(classPath);
2. 获取构造方法,以及填入相应的参数构造出客户端
// 1. 获取构造器,参数为ak,sk
Constructor<?> binApiClientConstructor = clientClazz.getConstructor(String.class, String.class);
// 2. 构造出客户端
Object apiClient = binApiClientConstructor.newInstance(accessKey, secretKey);
3. 获取这个类里面的所有方法
Method[] methods = clientClazz.getMethods();
4. 判断方法是否是需要调用的方法,返回获取相应的方法里面的参数
for (Method method : methods) {
if(method.getName.equals(methodName)){
Class<?>[] parameterTypes = method.getParameterTypes();
// 不需要参数,直接调用
if (parameterTypes.length == 0) {
// 如果没有参数,直接调用
return method.invoke(apiClient);}
// 需要参数
Gson gson = new Gson();
bject parameter = gson.fromJson(userRequestParams, parameterTypes[0]);
return method.invoke(apiClient, parameter);
}
}
总结
首先先通过类路径获取到对应的Class 如果有构造方法的话,那么就先使用构造器,构造出一个newInstance,然后传入相应的值 接下来就是获取里面相应的方法,然后调用里面的方法invoke即可。
贡献者
flycodeu
版权所有
版权归属:flycodeu