Java 函数的 参数 可以是 函数吗解决方法

Java 函数的 参数 可以是 函数吗
Java 函数的 参数 可以是 函数吗
------解决思路----------------------
不可以。
如果你是想在当前函数里面,动态根据传递的参数进行调用的话。可以利用反射机制做到。
比如:
import java.lang.reflect.Method;
public class Impl {
public static void doSomething(Class clazz, String methodName, Object ...objects) throws Exception{
Method method = null;
switch (objects.length) {
case 0:
method = clazz.getMethod(methodName);
method.invoke(clazz.newInstance());
break;
case 1:
method = clazz.getMethod(methodName, objects[0].getClass());
method.invoke(clazz.newInstance(),objects[0]);
break;
case 2:
method = clazz.getMethod(methodName, objects[0].getClass(), objects[1].getClass());
method.invoke(clazz.newInstance(),objects[0],objects[1]);
break;
default:
throw new RuntimeException("只支持3个以下(不含)参数的函数调用。");
}
}

public void m(String str){
System.out.println("---------" + str);
}

public static void main(String[] args){
try {
doSomething(Impl.class,"m","i am a gay.");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
这个代码还有些问题。。就是参数个数和类型不太好弄。用起来不太方便,但是使用方法原理已经给到了。
------解决思路----------------------
不可以   但有办法解决这个问题
你定义一个抽象类,然后在抽象类里定义你要传入的函数(抽象的),好了,你可以在你现在的函数里传入new 抽象类,你发现IDE提示你要实现那个方法,你现在可以写你要传入的函数了。
------解决思路----------------------
Java 函数的 参数 可以是 函数吗解决方法不可以,java根本不存在函数对象,但可以用变通的方法,类似C++的functor,你弄个传个类,让函数内部调用这个类的某个方法就行。现在java已经支持lamba,所以这个问题可以进一步简化,仍旧是传个类,只要这个类满足一定条件,加上使用lamba,就好像传了个方法一样,比如

fun(a, v -> v);

这里的v -> v就是个简单的lamba表达式,功能就是直接将传入的参数v返回,至于这个v是什么,就复杂了,建议你百度一下java的lamba
------解决思路----------------------
答案是jdk8以前不行,jdk8开始可以

比如在jdk8里你可以用

String test(Function<String, String> func, String input){
   return fun.apply(input);
}

你有个method
String reverse(String orig){
 ...
}

String encode(String text){
...
}

然后你可以这样调用test
test(s->reverse(s), "Hello"); //olleH
test(s->encode(s), "Hello"); //Cipher string