Java 使用常量迭代两个类,并将其字段加载到HashMap中
我有两个带有常量的java类,例如: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
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";
...
}
现在,我想把这些常数加载到,
Map第三个元素:键和值是
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
的规则是什么?这是类中的顺序吗?如果是,您没有其他机会,那么您自己进行映射,因为不能保证字节码中的顺序保持不变。