从 Hashmap put() 中获取调用方法名称的列表

Posted

技术标签:

【中文标题】从 Hashmap put() 中获取调用方法名称的列表【英文标题】:Get the list of invoking method name's from Hashmap put() 【发布时间】:2020-07-31 21:08:52 【问题描述】:

您能帮我从 HashMap put 方法中获取列表方法名称吗?

 Book book= new Book();
        book.setTitle("The Little Prince");
        book.setAuthor("Antoine de Saint-Exupery");
        book.setPrize(9.99);
        book.setPublisher("Delux Pop-up book");
        
        
        HashMap<String,String> map= new HashMap<String,String>();
        map.put("title",book.getTitle());
        map.put("author",book.getAuthor());
        map.put("prize",String.valueOf(book.getPrize()));
        map.put("publisher",validatePuplisher(book.getPublisher()));
        

例外结果是:book.getTitle(),book.getAuthor(),String.valueOf(book.getPrize()),validatePuplisher(book.getPublisher()) 即只是方法名称不是方法中的值。

【问题讨论】:

SO 的工作方式如下:展示您尝试过的内容并解释无效的内容。这不是“我有问题,请免费为我解决”。还请解释为什么您甚至会以这种方式想要这些信息?如果您对要放入地图的值感兴趣,我会理解,但为什么创建它们的源代码相关?在运行时你没有源代码,你有字节码,后者看起来与前者完全不同。 也许您刚刚开始编程,所以不用担心,我们在这里为您提供帮助。也许您想通过使用javap -c -p MyClass.class 检查目标类文件来检查字节码的外观。然后你会看到创建调用的顺序是(示意性地)Book.getPublisher()MyClass.validatePublisher(String)Map.put(String, String),即当put(..)被调用时,源代码中括号内的内容已经被评估,因为这就是 JVM 或一般计算在内部工作的方式。 【参考方案1】:

如果要获取使用的方法名,请将它们括在双引号中以被视为实际字符串。


 HashMap<String,String> map= new HashMap<String,String>();
        map.put("title","book.getTitle()");
        map.put("author","book.getAuthor()");
        map.put("prize","book.getPrize()");
        map.put("publisher","book.getPublisher()");

【讨论】:

基于在 examplemap.put("title",book.getTitle()); 我们看到"title" 我们可以安全地假设 OP 知道如何手动创建字符串。问题可能更多的是关于如何以编程方式将map.put("title",book.getTitle()); 转换为map.put("title","book.getTitle()"); 的等效项 既然你提到它,那可能就是这种情况。不幸的是,这可能注定是一个令人沮丧的练习,除非你自己开始遍历 java 源文件......

以上是关于从 Hashmap put() 中获取调用方法名称的列表的主要内容,如果未能解决你的问题,请参考以下文章

hashmap实现原理2

hashmap会问到数组索引,hash碰撞怎么解决

HashMap知识梳理

hashMap

关于HashMap

HashMap面试题