在运行时确定IF语句条件

时间:2015-10-01 09:52:31

标签: java runtime conditional-statements

我有一个函数接受两个参数foo(A a, String type),具体取决于我必须更改if语句条件的类型。

foo(A a, String type){
    //if type equals 'bar'
    if(!a.isEmpty() && a.hasMember()){...}
    //but if type is something else
    if(!a.isEmpty() || a.hasMember()){...}
}

if主体中的逻辑几乎是一样的,其他一切都是相同的,除了条件是否有任何有效的方法来实现差异或我必须写两次所有内容?

3 个答案:

答案 0 :(得分:2)

我想你可以使用以下内容:

foo(A a, String type){
    //if type equals 'bar'
    if("bar".equals(type)) {
       if(!a.isEmpty() && a.hasMember()){...}
    }
    else  {
      //but if type is something else
      if(!a.isEmpty() || a.hasMember()){...}
    }
}

说明:如果type有值" bar"然后,如果condition变为true,那么将执行你想要的那个条件的代码。

您还可以使用简洁的表格:

if( ("bar".equals(type) && (!a.isEmpty() && a.hasMember())) || (!"bar".equals(type) && (!a.isEmpty() || a.hasMember()))) {
  // Do your stuff  
}

需要注意的是,"bar".equals(type)优于type.equals("bar"),因为当类型为null时,它还可以避免您遇到麻烦。

答案 1 :(得分:1)

将谓词与||合并,并在每个条件部分中检查type

if (type.equals("bar") && !a.isEmpty() && a.hasMember()) || (!type.equals("bar") && (!a.isEmpty() || a.hasMember())) {
  //do your thing
}

如果null可能是type的值,则可以将支票更改为"bar".equals(type)以避免NullPointerException

答案 2 :(得分:1)

您可以使用具有键类型的映射,value应该是您键入相关逻辑的对象。

foo(A a, String type) {
    typesMap.get(type).execute(a);
}


class TaskImpl implements Task { // each task should behave as it should be
    @override
    public void execute(A a) {
        if(!a.isEmpty() && a.hasMember()) {...}
    }
}