java - 如何通过反射获取和初始化字段?
问题描述
我有一个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
不是我自己的班级,我只是和它一起工作。所以我不能将其结构更改为枚举。
解决方案
首先,您需要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;
推荐阅读
- python - 使用文件名作为数据框中的列标题
- android - 如果从服务更新对象,RealmObject.addChangeListener 不起作用
- python - 如何使用 Python 在 csv 行的末尾编写列表的单个元素?
- javascript - 谷歌字体 api - json 循环
- excel - 424 错误 VBA - 用户表单在我的机器上工作,但同事工作簿上出现错误
- php - 将自定义数据从联系人表单字段发布到 API 不起作用的 Mailchimp 列表
- sql - SQL Cross 适用于旋转逗号分隔值
- android - Android:仅为测试添加单独的资源
- javascript - 切换到另一个屏幕时反应导航,触发该屏幕上的功能
- asp.net-core - Swagger 中的多个 JWT