在Android中基于字符串值处理不同功能的最佳方法

时间:2015-01-13 13:13:37

标签: java android oop

我是字符串变量的不同值viz {type1,type2,type3 ..} 我有不同的函数,在每个字符串类型上调用,这个逻辑在多个地方使用。对此进行编码的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

假设您的字符串数量有限。在这种情况下,您可以实现检查每个String并在包装函数中调用相应函数的简单情况:

void function1(int a) {};
void function2(int a) {};
// ... etc

void callFunctionFromString(String s, int a)
{
   if(s.contentEquals("string1"))
        function1(a);
   else if(s.contentEquals("string2"))
        function2(a);
   // .. etc
}

每次你有一个很大的if ... else语句时,只需调用callFunctionFromString()。

但是我们假设你有很多很多可能的String值。在这种情况下,更有效(当你调用函数时)为Method调用创建一个String值的HashMap,如下所示:

interface methodInterface {
    public void callFunction(int a);
}

void function1(int a) {};
void function2(int a) {};
// ... etc

public HashMap<String, methodInterface> stringToFunctionHash = new HashMap<String, methodInterface>();    
void mapStringsToFunctions() throws NoSuchMethodException
{
    stringToFunctionHash.put("string1", new methodInterface(){public void callFunction(int a){function1(a);}});
    stringToFunctionHash.put("string2", new methodInterface(){public void callFunction(int a){function2(a);}});
    // .. etc
}

void callFunctionFromString(String s, int a)
{
    methodInterface m = stringToFunctionHash.get(s);
    if(m != null)
        m.callFunction(a);
}

在初始化期间调用mapStringsToFunctions(),然后像以前一样调用callFunctionFromString()。

答案 1 :(得分:1)

如果数字字符串很大,我建议您使用&#34;责任链&#34;图案。这样调用代码就不必决定调用哪个函数,但链中的每个项目都会决定它是否应该处理请求。它也很容易为链添加另一个处理程序。