函数调用中的对象扩展

时间:2010-08-26 17:40:04

标签: java

如果我有一个字符串:

String myColor = "Color.RED";

我如何让它工作:

graphics.setColor(myColor);

我想我问我如何将变量对象名称传递给函数。我已经尝试了很多东西,但却无法正常工作。

5 个答案:

答案 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)