如果我有一个字符串:
String myColor = "Color.RED";
我如何让它工作:
graphics.setColor(myColor);
我想我问我如何将变量对象名称传递给函数。我已经尝试了很多东西,但却无法正常工作。
答案 0 :(得分:3)
您需要进行错误检查以确保字符串有效,但问题的关键在于:
graphics.setColor((Color) Color.class.getField("RED").get(null));
当然,你还必须使用字符串操作来获取“颜色”。部分字符串。
答案 1 :(得分:2)
使用反射API有一些奇特的,肮脏的技巧,但最简单的解决方案是从字符串到值的映射:
Map<String, Color> colorMap = new HashMap<String, Color>();
colorMap.put("Color.RED", Color.RED);
以及稍后,当你需要一种颜色时:
String myColor = "Color.RED";
graphics.setColor(colorMap.get(myColor));
答案 2 :(得分:0)
如果你想在普通的java中写这个,你必须产生大量的代码(使用'。'ClassForName,getFields等分开,依此类推......)。或者您可以使用许多bean助手,即BeanUtils,或从项目中获得一些示例,已经使用反射(即Apache Velocity)
答案 3 :(得分:-1)
无法真正取消引用这样的常量。
使用Color.getColor("Color.RED".split("\.")[1])
获得相同的内容。
如果您尝试使用字符串,则必须执行以下操作:
String[] parts = myColor.split("\.");
String className = parts[0];
String fieldName = parts[1];
Class c = Class.forName(className);
Field f = c.getField(fieldName);
Object o = f.get(null);
Color col = (Color) o;
总之 - 不要。
答案 4 :(得分:-1)
对于枚举(如Color事件,但不仅仅是)的Scecifically,请参阅[Enum.valueOf] [1]方法。
[1]:http://cupi2.uniandes.edu.co/~cupi2/sitio/images/recursos/javadoc/j2se/1.5.0/docs/api/java/lang/Enum.html#valueOf(java.lang.Class,java.lang.String)