Java 使用常量迭代两个类,并将其字段加载到HashMap中

Java 使用常量迭代两个类,并将其字段加载到HashMap中,java,hashmap,Java,Hashmap,我有两个带有常量的java类,例如: public class FirstClass { public static final String STRING_A = "STRING_A"; public static final String STRING_B = "STRING_B"; public static final String STRING_C = "STRING_C"; ... } public class SecondClass { public sta

我有两个带有常量的java类,例如:

public class FirstClass {

 public static final String STRING_A = "STRING_A";
 public static final String STRING_B = "STRING_B";
 public static final String STRING_C = "STRING_C";
    ...
}


public class SecondClass {

 public static final String STRING_AA = "STRING_AA";
 public static final String STRING_BA = "STRING_BA";
 public static final String STRING_CA = "STRING_CA";
    ...
}
现在,我想把这些常数加载到, MapclassPropertyMap=newhashmap()这样,该映射的键必须是来自第一类的常量,相应的值必须是来自第二类的常量

如果它只是一个类,我可以使用反射来加载字段,既然常量来自两个类,那么这怎么办呢

最后,加载地图后,地图的内容必须如下所示:

第一个元素:键和值是

第二个元素:键和值是


第三个元素:键和值是

我认为如果您真的需要它,最可靠的方法是将属性显式地放到映射中

我的意思是
map.put(FirstClass.STRING\u A,SecondClass.STRING\u AA)等等


如果使用反射,则依赖于属性,并且它们的声明顺序永远不会更改。如果库中引入了一些新属性,它可能会破坏您的代码。

尝试下面的方法,似乎您可以实现

FirstClass first = new FirstClass();
Field[] fields = first.getClass().getFields();

SecondClass second = new SecondClass();
Field[] fields1 = second.getClass().getFields();
试试这个:

FirstClass first  = new FirstClass();    
String[] firstStrings = first.getStrings();
//Makes a String array, and fills it with the strings from the first class.

SecondClass second  = new SecondClass();    
String[] secondStrings = second.getStrings();    
//Makes a String array, and fills it with the strings from the second class.

HashMap<String, String> classPropertyMap = new HashMap<String, String>();
int i = 0;

//Now put strings with the same index number from both arrays into the 
//HashMap

while(i <= firstStrings.length()){
    classPropertyMap.put(firstStrings.get(i), secondStrings.get(i);
    i++;
}
FirstClass first=新的FirstClass();
String[]firstStrings=first.getStrings();
//生成一个字符串数组,并用第一个类中的字符串填充它。
SecondClass second=新的SecondClass();
String[]secondStrings=second.getStrings();
//生成一个字符串数组,并用第二个类中的字符串填充该数组。
HashMap classPropertyMap=新HashMap();
int i=0;
//现在将两个数组中索引号相同的字符串放入
//哈希映射

虽然(i)您仍然可以使用反射并尝试映射字段,但主要问题是:为什么?您想要实现什么?这些常量首先是用于什么的?映射意味着什么?两个常量类是:第一个包含我声明的属性,第二个包含来自第三方库的属性。i want有一个映射,以便我保持属性同步,即属性的最新状态。仍然很难了解实际问题是什么。但是为什么不使用枚举,其中每个值都包含属性名称的映射?或者如果不想使用枚举,那么为什么不手动填充映射?属性常量n第三方库无论如何都不应更改,否则您也可能在自动映射方面遇到问题。对于第一个类,使用带有字符串字段的枚举如何?然后您可以调用values()获取第一个类的所有值。这应该消除大量的反射。如果我们对您正在做的事情了解得更多,我怀疑我们可以找到更好的解决方案。将
STRING\u a
映射到
STRING\u AA
的规则是什么?这是类中的顺序吗?如果是,您没有其他机会,那么您自己进行映射,因为不能保证字节码中的顺序保持不变。