вызов функции на основе строки Android - PullRequest
2 голосов
/ 20 сентября 2011

У меня есть что-то вроде этого

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;
.....

Как мне реализовать getAttr для 1000-летнего атрибута?

Пожалуйста, не просите меня сделать mem как массив ... это невозможно из-за других частей программы.

Ответы [ 3 ]

7 голосов
/ 20 сентября 2011

Используйте отражение. Отражение

Это позволит вам вызывать любой открытый метод во время выполнения, используя имя метода в виде строки.

Class c = Class.forName("MyClass");
Method m = c.getMethod("get"+arg);
return (Integer) m.invoke(this);
4 голосов
/ 20 сентября 2011

Я предлагаю вам создать Map<String, Integer> attrMap и сделать

public int getAttr(String attr) {
    return attrMap.get(attr);
}
1 голос
/ 20 сентября 2011

Вы создаете 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
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...