Java 提及fnc
java中有没有一种方法可以执行以下操作:Java 提及fnc,java,Java,java中有没有一种方法可以执行以下操作: f(f1); //in some other place f(f2) //etc. Runnable x = new Runnable(){ @Override public void run() { // TODO Auto-generated method stub } }; //<-- notice the semi-colon. publ
f(f1);
//in some other place
f(f2)
//etc.
Runnable x = new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
}
}; //<-- notice the semi-colon.
public void f( Runnable x ) {
System.out.println("Hello");
x.run();
}
无效fncvoid引用到其他函数
我尝试的是,基本上我有很多地方需要向用户显示相同的文本,唯一的区别是在该文本之后调用哪个方法。因此,例如,不要写:
System.out.println("Hello");
f1();
//in some other place
System.out.println("Hello");
f2();
//etc
我想定义一个函数:
public void f(void Reference_to_other_func())
{
System.out.println("Hello");
Reference_to_other_func();//HERE I'M INVOKING
}
f(new Callback() {
public void doCallback() {
f1();
}
});
f(new Callback() {
public void doCallback() {
f2();
}
});
然后,我可以编写如下内容,而不是重复整个代码:
f(f1);
//in some other place
f(f2)
//etc.
Runnable x = new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
}
}; //<-- notice the semi-colon.
public void f( Runnable x ) {
System.out.println("Hello");
x.run();
}
感谢您的回答Java没有一流的函数,这使得大多数函数编程技术的实现有些繁琐 在这种情况下,您可以创建一个接口:
public interface Callback {
void doCallback();
}
public void f(Callback callback) {
System.out.println("Hello");
callback.doCallback();
}
编辑:也可以使用,它允许您指定返回类型
然后声明f以获取此接口的实例:
public interface Callback {
void doCallback();
}
public void f(Callback callback) {
System.out.println("Hello");
callback.doCallback();
}
并将此接口的实例传递给函数:
public void f(void Reference_to_other_func())
{
System.out.println("Hello");
Reference_to_other_func();//HERE I'M INVOKING
}
f(new Callback() {
public void doCallback() {
f1();
}
});
f(new Callback() {
public void doCallback() {
f2();
}
});
如您所见,除非您经常这样做,否则收益不会变得明显。Java没有一流的函数,这使得大多数函数编程技术的实现有些繁琐 在这种情况下,您可以创建一个接口:
public interface Callback {
void doCallback();
}
public void f(Callback callback) {
System.out.println("Hello");
callback.doCallback();
}
编辑:也可以使用,它允许您指定返回类型
然后声明f以获取此接口的实例:
public interface Callback {
void doCallback();
}
public void f(Callback callback) {
System.out.println("Hello");
callback.doCallback();
}
并将此接口的实例传递给函数:
public void f(void Reference_to_other_func())
{
System.out.println("Hello");
Reference_to_other_func();//HERE I'M INVOKING
}
f(new Callback() {
public void doCallback() {
f1();
}
});
f(new Callback() {
public void doCallback() {
f2();
}
});
正如您所看到的,除非您经常这样做,否则收益不会变得明显。通过反射,您可以获得实际的方法对象,然后执行
public void f(Method m) { System.out.println("Hello"); m.invoke(this, null); }
通过反射,您可以得到实际的方法对象,然后执行
public void f(Method m) { System.out.println("Hello"); m.invoke(this, null); }
不幸的是,IMHO方法函数在java中不是一级对象,这意味着如果不先将其附加到类,就无法创建匿名或命名方法 例如,您可以实现一个只做一件事的类,比如Callable或Runnable 您可以创建一个匿名类,如下所示:
f(f1);
//in some other place
f(f2)
//etc.
Runnable x = new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
}
}; //<-- notice the semi-colon.
public void f( Runnable x ) {
System.out.println("Hello");
x.run();
}
}
这样称呼它
...
// call the f-function :-)
f( new Runnable(){
@Override
public void run() {
System.out.println("World!");
}
}});
不幸的是,IMHO方法函数在java中不是一级对象,这意味着如果不先将其附加到类,就无法创建匿名或命名方法 例如,您可以实现一个只做一件事的类,比如Callable或Runnable 您可以创建一个匿名类,如下所示:
f(f1);
//in some other place
f(f2)
//etc.
Runnable x = new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
}
}; //<-- notice the semi-colon.
public void f( Runnable x ) {
System.out.println("Hello");
x.run();
}
}
这样称呼它
...
// call the f-function :-)
f( new Runnable(){
@Override
public void run() {
System.out.println("World!");
}
}});
f1和f2必须在同一个班级吗?为什么要这样做?您可以传递对变量或对象的引用,也可以直接调用方法。你也可以尝试使用函数式语言,比如Haskell。f1和f2必须在同一个类中吗?为什么要这样做?您可以传递对变量或对象的引用,也可以直接调用方法。你也可以尝试使用函数式语言,比如Haskell。是的,但实际上获取方法对象是很长的一部分。是的,但实际上获取方法对象是很长的一部分。