MCPcopy Create free account
hub / github.com/TIIEHenry/HyperOSRuntime / ReflectHelper

Class ReflectHelper

app/src/main/java/nota/reflect/ReflectHelper.java:8–258  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

6import java.lang.reflect.Method;
7
8public class ReflectHelper {
9 /**
10 * 获取一个class的实例,需要调用者指定参数类型,主要用来调用含有基本类型{如int,double等}的构造方法
11 *
12 * @param className 需要构造的类类型
13 * @param paramsTypes 参数类型数组,需要与params一一对应
14 * @param params 参数数组
15 * @return 返回实例后的对象
16 * @throws Exception 如果实例化不成功,抛出异常
17 */
18 public static Object reflectConstructor(String className, Class<?>[] paramsTypes, Object[] params) throws Exception {
19 if (params != null && params.length > 0) {
20 Class clazz = ReflectionCache.build().forName(className);
21 Constructor<?> con = clazz.getConstructor(paramsTypes);
22 return con.newInstance(params);
23 } else {
24 Class clazz = ReflectionCache.build().forName(className);
25 Constructor<?> con = clazz.getConstructor();
26 return con.newInstance();
27 }
28 }
29
30 /**
31 * 通过反射执行一个类的静态方法,如果无参数,params传入null
32 *
33 * @param className 需要执行操作的对象实例
34 * @param methodName 需要执行的方法名
35 * @param paramsTypes 参数类型数组,需要与params一一对应
36 * @param params 参数数组
37 * @return 返回执行结果
38 * @throws Exception 如果执行失败,抛出异常
39 */
40 public static Object invokeStatic(String className, String methodName, Class<?>[] paramsTypes, Object[] params) throws Exception {
41 Class<?> objClass = ReflectionCache.build().forName(className);
42 return invoke(objClass, null, methodName, paramsTypes, params);
43 }
44
45 /**
46 * 通过反射执行一个类的静态方法,如果无参数,params传入null
47 *
48 * @param className 需要执行操作的类名称,包括包名
49 * @param methodName 需要执行的方法名
50 * @param params 参数数组
51 * @return 返回执行结果
52 * @throws Exception 如果执行失败,抛出异常
53 */
54 public static Object invokeStatic(String className, String methodName, Object[] params) throws Exception {
55
56 Class<?> objClass = ReflectionCache.build().forName(className);
57 return invoke(objClass, null, methodName, params);
58 }
59
60 private static Class<?>[] getParamsTypes(Object[] params) {
61 Class<?>[] paramsType = new Class[params.length];
62 for (int i = 0; i < paramsType.length; ++i) {
63 paramsType[i] = params[i].getClass();
64 }
65 return paramsType;

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected