java笔记_8_动态调用方法
//1.根据名称获取类 Class xxxClass = Class.forName("类名"); //2.根据名称获取方法 //2.1.不带参数 Method xxxMethod = xxxClass.getMethod("方法名", new Class[]{}) //2.2.带参数 Method xxxMethod = xxxClass.getMethod("方法名", new Class[]{Long.class, String.class}) //3.调用方法 //3.1.无返回数据(是否有入参不影响) xxxMethod.invoke(xxxClass, new Object[] {}); //3.1.有返回数据(是否有入参不影响) Integer returnData = (Integer)xxxMethod.invoke(xxxClass, new Object[] { 1L, "test" });
Class xxxClass = null; try { xxxClass = Class.forName("xxx.xxx.xxx"); Integer num = (Integer) xxxClass.getMethod(funcName, new Class[]{Long.class}).invoke(xxxClass, new Object[] { 1L }); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); }
Class<XXXService> xxxServiceClass = XXXService.class; try { Class<XXXService> xxxServiceClass = XXXService.class; XXXService xxxService = xxxServiceClass.getDeclaredConstructor().newInstance(); //不传参 Method func1 = xxxServiceClass.getDeclaredMethod(funcName); func1.invoke(xxxService); //传参 Method func2 = xxxServiceClass.getDeclaredMethod(funcName, Long.class); func2.invoke(xxxService, uId); //传参,有返回数据 Method func3 = xxxServiceClass.getDeclaredMethod(funcName, Long.class); Integer num = (Integer) func3.invoke(xxxService, uId); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理