gpt4 book ai didi

java - 如何从具有多个相同字段值的类的值中获取字段名称

转载 作者:行者123 更新时间:2023-12-04 20:39:53 26 4
gpt4 key购买 nike

我正在尝试使用 Reflection 从值中打印字段名称。但是,当没有重复字段时它会起作用。但在下面的例子中,假设我有具有重复值的字段,我将它们放在 HashMap 中。在那种情况下,我会得到不正确的字段名称。

我选择了 HashMap 来存储字段名称,但是有人可以告诉我是否有任何其他方法可以实现我正在尝试做的事情

public class TestBug {

private static String banana = "green";
private static String apple = "red";
private static String blueberry = "blue";
private static String mango = "green";


private Map<String, String> fillFruitMap() {
Map<String, String> fruitMap = new HashMap<String, String>();
String fruitColor = "";
String fruitName = "";
Field[] fields = TestBug.class.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
try{
fruitColor = fields[i].get(this).toString();
fruitName = fields[i].getName();
fruitMap.put(fruitColor, fruitName);
}
catch(Exception e){
e.printStackTrace();
}
}
return fruitMap;
}

private String getFruitNameFromColor(String color) {
return fillFruitMap().get(color);
}

private void printStatement(String fruit) {
System.out.println("Green is the color of "+getFruitNameFromColor(fruit));
}

public static void main(String[] args) {
TestBug bug = new TestBug();
bug.printStatement(banana);
}

在上面的代码中,因为我将 banana 传递给 printStatement 方法,所以它也应该打印 banana ,因为我正在使用 Reflection 并将字段值和名称作为 keyvalue 对存储在 HashMap 中。但是由于 HashMap 不允许重复的 keybananamango 覆盖了。有没有办法实现我想要做的事情?

有没有办法使用 hashCode()

最佳答案

一个选项是使用 Map<String, List<String>>而不是 Map<String, String>

private Map<String, List<String>> fillFruitMap() {
Map<String, List<String>> fruitMap = new HashMap<String, List<String>>();
String fruitColor = "";
String fruitName = "";
Field[] fields = TestBug.class.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
try{
fruitColor = fields[i].get(this).toString();
fruitName = fields[i].getName();
List<String> list = fruitMap.get(fruitColor);
if(list == null) list = new ArrayList<String>();
list.add(fruitName);
fruitMap.put(fruitColor, list);
}
catch(Exception e){
e.printStackTrace();
}
}
return fruitMap;
}

关于java - 如何从具有多个相同字段值的类的值中获取字段名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32954984/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com