从 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() 中获取调用方法名称的列表的主要内容,如果未能解决你的问题,请参考以下文章