使用params调用方法

时间:2017-12-11 14:56:46

标签: java

这是关于编程的一般问题。我希望能够将一个参数放入一个函数并让一个对象调用该参数,例如:

    void printCells(cell[] cellArr, String method) {
       for (int i = 0; i < cellArr.length; i++) {
          cell c = cellArr[i];
          println(c.method);
       }
    }

这段代码只是一个实用功能,方便我使用,我希望能够在单元格对象中打印出一些值,它具有value,row,col,subrow和subcol的值。我想使用这个函数,如:

    printCells(cells, subrow);

它将通过上面的for循环并打印出单元格数组中每个单元格对象的子行值,我将其作为cellArr传递。

这甚至可能吗?或者我需要一个长if语句,例如:

    void printCells(cell[] cellArr, String method) {
      for (int i = 0; i < cellArr.length; i++) {
        cell c = cellArr[i];
        if (method == "row"){
          println(c.row);
        } else if (method == "col"){
          println(c.col);
      }
    }

等等。请让我知道!

2 个答案:

答案 0 :(得分:2)

你可以使用反射来做,但使用lambdas可能更容易:

void printCells(cell[] cellArr, Function<cell, Object> getter) {
    for (cell c : cellArr)
        println(getter.apply(c));
}

然后你可以用类似

之类的东西来调用它
printCells(cells, cell::getSubrow)

printCells(cells, cell -> cell.subrow) // thanks to Lino for suggestion

答案 1 :(得分:1)

我认为在xs0的答案中使用lambdas或方法引用是可取的,但如果你需要调用的方法只能通过其名称引用,或者你只能使用旧版本的Java(&lt; 8)然后值得使用reflection

void printCells(cell[] cellArr, String getter) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
    Method getterMethod = cell.class.getMethod(getter);
    for (cell c : cellArr) {
        println(getterMethod.invoke(c));
    }
}

可以这样称呼:

printCells(cellArr, "getContent");

(请注意,您必须在帐户中处理抛出的异常。)