Java:将变量设置为类的变量,其中类的名称是字符串?

时间:2011-10-20 00:33:15

标签: java string class variables

这是我今天的第三个问题(也是最后一个问题)。

是否可以将变量的值声明为类的变量,其中类的名称是字符串?

实施例

int newalpha;
String color_name = "yellow";
Color red = new Color();
Color yellow = new Color();
Color blue = new Color();
newalpha = color_name.alpha

在此示例中,“。alpha”是Color类中包含的变量。我想要模拟的部分是“newalpha = color_name.alpha”,因为很明显“color_name”是一个String,而不是一个颜色。这可能吗?

由于

2 个答案:

答案 0 :(得分:3)

TL; DR回答:否。

现实:是的,有点,通过反思和ew。

根据您的使用情况,可能有一种方法可以实现您想要的效果,例如将颜色存储在哈希映射中,并将颜色名称作为键,因此您只需说colors.get(colorName).alpha。< / p>

Map<String, Color> colors = new HashMap<String, Color>() {{
    put("red", new Color());
    put("yellow", new Color());
    put("blue", new Color());
}};
String colorName = "yellow";
int newalpha = colors.get(colorName).alpha;

答案 1 :(得分:0)

正如在其他地方发布的那样,您确切问题的答案是“不”。我的补充说:“使用更具表现力的语言,如Lisp,Python,Ruby或类似的语言。”

我怀疑你问的是错误的问题。你真正想要的是获得任意颜色的alpha值的方法。面向对象的设计倡导者会利用这个机会来填补工厂方法,子类型多态,枚举类型和其他类似的东西。

鉴于我对你的编码水平以及项目的复杂性完全没有受过教育的猜测,看起来像一个可接受的解决方法(如果不是正确的方法)要简单得多:

int newAlpha = 0;
if(colorName.equals("yellow") newAlpha = yellow.getAlpha();
else if(colorName.equals("red") newAlpha = red.getAlpha();
else if(colorName.equals("blue") newAlpha = blue.getAlpha();
else //raise some kind of exception, assert false, or do something else that seems sensible

(请注意,我稍微改变了一些名称以匹配Java的风格。)

我不知道Color课程中发生了什么(甚至redyellowblue的不同之处 - 使用当前的代码'将是相同的事情(局部变量名称不影响它们引用的对象)),但是将if序列分解为单独的方法可能是合适的。和/或使用HashMap因此:

HashMap<String, Integer> alphaValues = new HashMap<String, Integer>();
alphaValues.put("red", /* something like red.getAlpha() */);
//etc.
// ...
newAlpha = alphaValues.get(colorName);

我还没有真正解决范围问题 - 我相信你能搞清楚。

希望有所帮助!

编辑:Dave Newton打败了我关于hashmap的一拳 - 他在创建我的帖子时编辑了他的帖子。