Java 基于字符串的调用函数
我有这样的课Java 基于字符串的调用函数,java,android,function,Java,Android,Function,我有这样的课 class MClass { private int mem1,mem2,mem3.......; public int getmem1() { return mem1; } public int getmem2() { return mem2; } ...... 现在我想要这样的东西: public int getAttr(String attr) { if (attr=="mem1") return mem1; elseif (attr=="mem2") return me
class MClass
{
private int mem1,mem2,mem3.......;
public int getmem1()
{
return mem1;
}
public int getmem2()
{
return mem2;
}
......
现在我想要这样的东西:
public int getAttr(String attr)
{
if (attr=="mem1")
return mem1;
elseif (attr=="mem2")
return mem2;
.....
如何为1000秒的attr实现getAttr
请不要让我将mem设置为数组。。由于程序的其他部分,这是不可能的。我建议您创建一个
映射attrMap
并执行以下操作
public int getAttr(String attr) {
return attrMap.get(attr);
}
您可以创建一个地图
。作为键,使用attr作为值
class MyCall {
private final Map<String,Object> map = new HashMap<String,Object>();
public Object getAttr(String attr) {
return map.get(attr);
}
}
使用反射
这将允许您在运行时使用方法名称作为字符串调用任何公共方法
Class c = Class.forName("MyClass");
Method m = c.getMethod("get"+arg);
return (Integer) m.invoke(this);
然后他必须定义数千个getXXX方法,不要认为这是一个解决方案。我可以定义这些方法,我不想像我提到的那样更改类中的数据类型。。约翰回答得很好。。谢谢。我知道已经晚了,但如果我不得不猜测否决票是因为该问题要求一个没有数组的解决方案(哈希表、映射、Discitionary)。@Vash,出于与上面
aioobe
相同的原因,您提供了一个需要数组的答案-该问题显然要求您不要这样做。
Class c = Class.forName("MyClass");
Method m = c.getMethod("get"+arg);
return (Integer) m.invoke(this);