如果condition-java,将Condition作为字符串传递给另一个函数

时间:2013-08-19 06:12:00

标签: java

这是我的需要:

String condition=null;
condition="row==2&&column==2||row==6&&column==1||row==1&&column==2 
|| row==4 && column==1";
table.setDefaultRenderer(Object.class, new CellColorChanger(condition));
在CellColorChanger类中

我想用,

 if (condition)
        {
            setBackground(Color.GREEN);
            setForeground(Color.RED);
        }

我知道这是不可能的。但这是我的要求。 如果有人知道正确的接近方式或替代解决方案,请尽快回复我。

4 个答案:

答案 0 :(得分:1)

这个怎么样?

  public static void main(String[] args) {
        boolean condition=false;
        int row=0;
        int column=0;
        condition=row==2&&column==2||row==6&&column==1||row==1&&column==2
                || row==4 && column==1;
        setParam(condition);
    }

    public static void setParam(boolean condition){
        if (condition)
        {
            setBackground(Color.GREEN);
            setForeground(Color.RED);
        }
    }

但是在这里,您可以将condition定义为boolean而不是String

答案 1 :(得分:0)

您可以创建一个方法,并将其放在CellColorChanger class:

private boolean checkCondition(){
  return /* whatever condition like: */ (row == 2 && column == 2) || (row == 6 && column == 1) || (row == 1 && column == 2) || (row == 4 && column == 1);
}

只要您希望重新评估条件,就可以在传递的CellColorChanger对象上调用此函数。

答案 2 :(得分:0)

你必须这样做

new CellColorChanger(row,column)

在您的CellColorChanger类

     if(row==2&&column==2||row==6&&column==1||row==1&&column==2 || row==4 && column==1){

        setBackground(Color.GREEN);
        setForeground(Color.RED);
 }

答案 3 :(得分:0)

如果您想要的是进行某种形式的函数编程(这对我来说更有可能),那么您可以将其实现为:

interface Condition {
    boolean isTrueFor(Map parameters);
}
public void CellColorChanger(Condition condition) {
    Map<String,String> arguments= new HashMap<String,String>() ;
    //  Populate arguments
    arguments.set("row",String.valueOf(specificRow));
    arguments.set("column",String.valueOf(specificColumn));
    if( condition.isTrueFor(arguments) ) {
        //  Whatever
    }
}
...
Condition myFirstCondition= new Condition() {
    boolean isTrueFor(Map parameters) {
        int row= Integer.paseInt( parameters.get("row") ) ;
        int column= Integer.paseInt( parameters.get("column") ) ;
        return row==2 && column==2 || row==6 && column==1 || row==1 && column==2 || row==4 && column==1
    }
};

如果您想要做一些非常通用的事情,那将会奏效。但是,我的首选替代方法对应的代码更简单,更清晰,更易于管理:

interface Row_Column_Condition {
    boolean isTrueFor(int row,int column);
}
public void CellColorChanger(Condition condition) {
    if( condition.isTrueFor(specificRow,specificColumn) ) {
        //  Whatever
    }
}
...
Row_Column_Condition mySecondCondition= new Row_Column_Condition() {
    boolean isTrueFor(int row,int column) {
        return row==2 && column==2 || row==6 && column==1 || row==1 && column==2 || row==4 && column==1
    }
};