这是我今天的第三个问题(也是最后一个问题)。
是否可以将变量的值声明为类的变量,其中类的名称是字符串?
实施例
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,而不是一个颜色。这可能吗?
由于
答案 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
课程中发生了什么(甚至red
,yellow
和blue
的不同之处 - 使用当前的代码'将是相同的事情(局部变量名称不影响它们引用的对象)),但是将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的一拳 - 他在创建我的帖子时编辑了他的帖子。