首页 > 解决方案 > 如何通过反射获取和初始化字段?

问题描述

我有一个ColorConstants带有一些静态字段的类:

public class ColorConstants {
    public static final Color BLACK;
    public static final Color BLUE;
    public static final Color GREEN;
    public static final Color RED;
    // ....
}

我想检查String该类中是否存在给定的颜色()。

使用反射是否合适?

String s = "RED";
Field f = ColorConstants.class.getField(s);
Color colorConstant = (Color) myField.get(null);

在这里,我不确定如何获得实际值。
所以我基本上需要的是:要么ColorConstant.RED(如果存在)要么null(如果不存在)。

PS:ColorConstants不是我自己的班级,我只是和它一起工作。所以我不能将其结构更改为枚举。

标签: javareflection

解决方案


首先,您需要Field像以前一样按名称获取对象,接下来您可以通过 catch 测试字段是否存在NoSuchFieldException

Color colorConstant = null;
String s = "RED";
try {
  Field f = ColorConstants.class.getField(s);
  colorConstant = f.get(null);
} catch (NoSuchFieldException e){
  // Nothing to do here colorConstant already null
}
return colorConstant;

推荐阅读