java如何遍历执行方法/函数

 zh1234之歌 发布于 2022-11-03 16:16

伪代码:

for(String key, map.keyset()) {
    if(map.get(key) != null) {
        obj.key?();
    }
}

上面的key?代表根据不同的key执行不同的方法,比如key"key1"obj.key1()key"key2"时,obj.key2()

问:java如何实现?

PS:我知道C语言实现的思路,原理是C语言的函数也是指针可以指向的,函数是变量。
但java的方法不能去引用吧?

请给出解决方案,要有代码。

1 个回答
  • 你需要使用反射

    package com.company;
    
    
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    import java.util.*;
    
    public class ReflectionDemo {
    
        public void a(String param) {
            System.out.println("do one thing: " + param );
        }
    
        public void b(String param) {
            System.out.println("do another thing: " + param);
        }
    
        public static void main(String[] args) {
            ReflectionDemo reflectionDemo = new ReflectionDemo();
            Map<String, String> methods = new HashMap<String, String>();
            methods.put("a", "someData");
            methods.put("b", "anotherData");
    
            for (Map.Entry<String, String> item : methods.entrySet()) {
                try {
                    //getMethod第一个参数是函数名,后面的参数都是针对于目标方法的参数类型,没有参数就传null
                    Method method = ReflectionDemo.class.getMethod(item.getKey(), String.class);
                    //invoke第一个参数是一个对象的实例,后面跟进一堆参数列表,没有参数就传null
                    method.invoke(reflectionDemo, item.getValue());
                } catch (NoSuchMethodException e) {
                    e.printStackTrace();
                } catch (InvocationTargetException e) {
                    e.printStackTrace();
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
            }
        }
    
    }
    

    输出

    do one thing: someData
    do another thing: anotherData

    2022-11-06 05:07 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有