有没有办法从int值中获取常量字段值的字符串表示?
例如,java.util.Calendar声明了几个字段值,例如
public final static int AUGUST = 7;
有任何方法可以将此信息转换为Map<Integer, String> containing for instance
&lt; 7,“8月”&gt;`等等。
P.S。这不是我的课,所以我不能使用ENUM。我以日历为例。
答案 0 :(得分:1)
您可以使用反射。例如,说Foo
是类,您可以使用以下方法获取字段:
Foo.class.getDeclaredFields();
然后,您可以遍历多个字段,并使用Field.getName()
和Field.get(null)
来实现该值。
例如,假设Foo
具有以下定义:
public class Foo {
public static final int JANUARY = 1;
public static final int FEBRUARY = 2;
}
您可以运行以下代码:
HashMap<Object,String> map = new HashMap<>();
for (Field f : Foo.class.getDeclaredFields()) {
try {
int modifiers = field.getModifiers();//check if the field is public and static
if (Modifier.isPublic(modifiers) && Modifier.isStatic(modifiers)) {
if (f.get(null) != null) {
map.put(f.get(null),f.getName());
}
} catch (Throwable t) {
}
}
这将导致HashMap
包含<1,"JANUARY">
和<2,"FEBRUARY">
。
答案 1 :(得分:1)
是基于Reflection
的解决方案,但我觉得你应尽可能避免使用Reflection
。一种选择是采取良好的手动方法..
Map<Integer, String> values = HashMap<Integer, String>();
values.put(1, "JANUARY");
// You get the idea.
是的,这不是很酷,但它可以在不调用Reflection
的情况下完成工作,并且鉴于您似乎是初学程序员,我会避免Reflection
直到您完全,100%自信。
答案 2 :(得分:-1)
虽然从技术上来说这是可能的,通过反射和使用Class#getDeclaredFields()
,你问这个事实足以说明你不应该使用它。