Java 函数的 参数 可以是 函数吗 Java不可以, JavaScript可以, 也就是所谓的回调函数 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不可以。如果你是想在当前函数里面,动态根据传递的参数进行调用的话。可以利用反射机制做到。比如: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提示你要实现那个方法,你现在可以写你要传入的函数了。 5L对的,Executor.execute(Runnable) 就是这个意思 不可以,java根本不存在函数对象,但可以用变通的方法,类似C++的functor,你弄个传个类,让函数内部调用这个类的某个方法就行。现在java已经支持lamba,所以这个问题可以进一步简化,仍旧是传个类,只要这个类满足一定条件,加上使用lamba,就好像传了个方法一样,比如fun(a, v -> v);这里的v -> v就是个简单的lamba表达式,功能就是直接将传入的参数v返回,至于这个v是什么,就复杂了,建议你百度一下java的lamba Java 方法的 参数 可以是 对象类型,可以调用对象的方法 Java的参数可以使基本数据类型,自定义对象类型,数组、字符串、List集合和Set集合对象等等类型都可以。函数和方法不行。 f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e){ System.exit(0); } });差不多是这个吧。 java虽然不支持这个,但是有很多的变通方法可以解决这个问题,例如用反射是可以很好的解决这个问题的。据说最新jdk已经支持了闭包,不知道是不是真的,我还没有用过。 java可以用函数对象,来实现函数式编程。effective java 第21条 用函数对象表示策略,即使这个意思。 你可以传 对象然后调用对象的方法 在java里 函数也是一个对象 可以把这个 对象当参数 然后用反射调用 答案是jdk8以前不行,jdk8开始可以比如在jdk8里你可以用String test(Function<String, String> func, String input){ return fun.apply(input);}你有个methodString reverse(String orig){ ...}String encode(String text){...}然后你可以这样调用testtest(s->reverse(s), "Hello"); //olleHtest(s->encode(s), "Hello"); //Cipher string 求救:Java卸载时提示“安装时发生严重错误” 如何把数据导出excel 集群环境下!如果系统中有用到session的话 Eclipse中如何添加库?大侠请进 请各位师兄师姐看一下,麻烦了? -------如何将一个TextArea设置为只读----- 一个关于applet存放路径的问题! 关于applet的一个问题:^0^ 请问SQL中的datetime类型于java中什么类型对应? TreeSet为什么元素总是重复呢?是在没法了 新手请教高手帮忙改写脚本 java socket 服务器 如何用 有限的 线程 来管理 所有 客户端。
如果你是想在当前函数里面,动态根据传递的参数进行调用的话。可以利用反射机制做到。
比如:
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提示你要实现那个方法,你现在可以写你要传入的函数了。
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
差不多是这个吧。
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