基于字符串android的调用函数

时间:2011-09-20 10:31:33

标签: 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 mem2;
.....

如何实现1000个attr的getAttr?

请不要让我把mem作为数组......由于程序的其他部分而无法实现。

3 个答案:

答案 0 :(得分:7)

使用反射。 Reflection

这将允许您在运行时使用方法名称作为String调用任何公共方法。

Class c = Class.forName("MyClass");
Method m = c.getMethod("get"+arg);
return (Integer) m.invoke(this);

答案 1 :(得分:4)

我建议您创建Map<String, Integer> attrMap并执行

public int getAttr(String attr) {
    return attrMap.get(attr);
}

答案 2 :(得分:1)

您创建了Map<String,Object>。作为关键,您使用attr作为值的值。

class MyCall {

    private final Map<String,Object> map = new HashMap<String,Object>();

    public Object getAttr(String attr) {

        return map.get(attr);

    }
}

如果值始终为整数,则可以将通用参数Object替换为Integer

public int getAttr(String attr)  {

   if(map.contains(attr)) {
    return map.get(attr).intValue();
   } else {
    reutrn ERROR_CODE; //As error or throw exception
   }
}
相关问题