gpt4 book ai didi

java - 如何将方法作为参数传递?

转载 作者:行者123 更新时间:2023-12-01 19:41:46 28 4
gpt4 key购买 nike

我有一个包含很多方法的类。在另一个类中,我需要编写一个处理输入值的方法。对于该方法,我想传递我想要调用的类的方法。 1.8 之后的 Java 如何做到这一点?

已经有类似的问题,但这些问题通常假设我们可以使用具有单个方法的接口(interface),因此可以使用 lambda 表达式等。

class MyClass {
public Object myToString(String a) {
return new String(a);
}

public Object myToString(String a, String b) {
return new String(a + ", " + b);
}

public Object mySum(int a) {
return new Integer(a);
}

public Object mySum(int a, int b) {
return new Integer(a + b);
}
}

class Test {
public Object handleInputs(MyClass myClass, MethodAsParameter theMethod, List<Object> inputs) {
if (type of inputs are Strings) {
myClass.myToString(inputs.get(0));
} else if (.....) {
myClass.mySum(inputs.get(0));
}
}
}

最佳答案

从 Java 8 开始,您可以使用方法引用。方法引用可以分配给 Function<A, B>函数式接口(interface)变量及其子类。

例如,具有这样签名的方法:

class Test {
public static int DoSomething(String s) {...}
}

可以分配给Function<String, Integer>变量如:

Function<String, Integer> method = Test::DoSomething;

然后调用:

int result = method.apply("Hello!");

因此,通过对代码进行小幅改进,您可以将方法用作方法引用并作为参数传递给其他函数。

class MyClass {

public static String myToString(String a, String b) {
return a + ", " + b;
}

//notice the boxing in here
public static int mySum(int a, int b) {
return a + b;
}

//not kind of an revolutionary function, just for demonstration
public static<T> T Invoke(BinaryOperator<T> bo, T o1, T o2) {
return bo.apply(o1, o2);
}


public static void main(String[] args) {

int sum = Invoke(MyClass::mySum, 10, 20);
String str = Invoke(MyClass::myToString, "a", "b");

System.out.println(sum);
System.out.println(str);

}

}

关于java - 如何将方法作为参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55170208/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com