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();
        }
复制代码

 

posted @   LuLuYaa  阅读(730)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示