java中字段常量的字符串值

时间:2014-03-06 16:48:22

标签: java

有没有办法从int值中获取常量字段值的字符串表示?

例如,java.util.Calendar声明了几个字段值,例如
public final static int AUGUST = 7;

有任何方法可以将此信息转换为Map<Integer, String> containing for instance &lt; 7,“8月”&gt;`等等。

P.S。这不是我的课,所以我不能使用ENUM。我以日历为例。

3 个答案:

答案 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(),你问这个事实足以说明你不应该使用它。