在Java中将函数作为引用传递给另一个方法

在Java中将函数作为引用传递给另一个方法,java,pass-by-reference,Java,Pass By Reference,我在ABC类中有一个函数,其定义大致如下 Boolean getBool(Value val1, Value val2) { if (val1.getVal() == val2.getVal()) { return true; } return false; } 如何将这个方法作为引用传递给另一个方法,比如说operate()并从那里调用它 String operate(<<<Pass getBool method here>>>, Pa

我在ABC类中有一个函数,其定义大致如下

Boolean getBool(Value val1, Value val2) {
  if (val1.getVal() == val2.getVal()) {
    return true;
  }
  return false;
}
如何将这个方法作为引用传递给另一个方法,比如说operate()并从那里调用它

String operate(<<<Pass getBool method here>>>, Param1) {
  val1 = some computations on Param1
  val2 = some other computations on Param2
  Boolean value = <<<<<Call getBool with val1 and val2 here>>>>>
  if (value) { return "Yes"; }
  else { return "No"; }
}
字符串操作(,参数1){
val1=参数1上的一些计算
val2=参数2上的一些其他计算
布尔值=
如果(值){返回“是”;}
else{返回“否”;}
}
请帮忙!! 我读过一些解决方案,但它们要么通过引用传递一个带参数的方法,但返回类型无效,要么通过引用传递一个不带任何参数和返回类型的方法。
我想通过引用参数和返回类型来传递函数。

您的方法可以用Java 8函数接口
BiFunction
表示,因为它接受两个参数并返回一个值

String operate(BiFunction<Value,Value,Boolean> function, TypeOfParam1 param1, TypeOfParam2 param2) {
    val1 = some computations on param1
    val2 = some other computations on param2
    Boolean value = function.apply(val1,val2);
    return value ? "Yes" : "No";
}
使用双功能类:

public class Test {

private static Boolean getBool(int val1, int val2) {
    if (val1 == val2) {
        return true;
    }
    return false;
}

private static String operate(BiFunction<Integer, Integer, Boolean> fun, int param1, int param2) {
    int val1 = param1;
    int val2 = param2;
    Boolean value = fun.apply(val1, val2);
    if (value) {
        return "Yes";
    } else {
        return "No";
    }
}

public static void main(String[] args) {
    operate(TestStaticReference::getBool, 1, 2);
    }

}
公共类测试{
私有静态布尔getBool(int-val1,int-val2){
if(val1==val2){
返回true;
}
返回false;
}
私有静态字符串操作(双功能乐趣、int-param1、int-param2){
int val1=param1;
int val2=param2;
布尔值=fun.apply(val1,val2);
如果(值){
返回“是”;
}否则{
返回“否”;
}
}
公共静态void main(字符串[]args){
操作(TestStaticReference::getBool,1,2);
}
}

布尔值=getBool(val1,val2)?您可以使用
BiPredicate
类型。下面是一个列表:或者,您可以定义自己的函数接口。简单的方法是将对该方法的调用封装在lambda中,然后传递lambda。Java有一个
iirc,也可以用来获取对方法的引用。在这里,您将学习如何将函数作为参数传递:虽然这个问题在技术上是一个重复的问题,但是如果您可以使用Java8Lambdas,那么阅读其他问题和答案时,您往往会淹没在Java-8之前的内容中,而这些内容是您不想要的。我想你会从中得到最好的答案。谢谢!这有助于:)
public class Test {

private static Boolean getBool(int val1, int val2) {
    if (val1 == val2) {
        return true;
    }
    return false;
}

private static String operate(BiFunction<Integer, Integer, Boolean> fun, int param1, int param2) {
    int val1 = param1;
    int val2 = param2;
    Boolean value = fun.apply(val1, val2);
    if (value) {
        return "Yes";
    } else {
        return "No";
    }
}

public static void main(String[] args) {
    operate(TestStaticReference::getBool, 1, 2);
    }

}