Java 如何在android中将一个函数作为参数传递给另一个函数?

Java 如何在android中将一个函数作为参数传递给另一个函数?,java,android,methods,parameters,Java,Android,Methods,Parameters,那么我如何将一个函数作为参数传递给另一个函数,例如,我想传递这个函数: public void testFunkcija(){ Sesija.forceNalog(reg.getText().toString(), num); } 在这方面: public static void dialogUpozorenjaTest(String poruka, Context context, int ikona, final Method func){ AlertDialog.

那么我如何将一个函数作为参数传递给另一个函数,例如,我想传递这个函数:

public void testFunkcija(){
    Sesija.forceNalog(reg.getText().toString(), num);
}
在这方面:

    public static void dialogUpozorenjaTest(String poruka, Context context, int ikona, final Method func){
    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
            context);
        alertDialogBuilder.setTitle("Stanje...");
        alertDialogBuilder
            .setMessage(poruka)
            .setIcon(ikona)
            .setCancelable(true)                        
            .setPositiveButton("OK",new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog,int id) {
                    //here
                }
              });

        AlertDialog alertDialog = alertDialogBuilder.create();
        alertDialog.show();
}

函数本身不能直接传递。您可以使用
接口
实现作为回调机制来进行调用

接口:

public interface MyInterface {

   public void testFunkcija();
}   
实施:

public class MyInterfaceImpl implements MyInterface 
   public void testFunkcija(){
       Sesija.forceNalog(reg.getText().toString(), num);
   }
}
并根据需要将一个
MyInterfaceImpl
实例传递给:

public static void dialogUpozorenjaTest(MyInterface myInterface, ...)

   myInterface.testFunkcija();
   ...

您可以使用Runnable包装您的方法:

Runnable r = new Runnable() {
    public void run() {
        Sesija.forceNalog(reg.getText().toString(), num);
    }
}
然后将其传递给您的方法并调用
r.run()您需要它的地方:

public static void dialogUpozorenjaTest(..., final Runnable func){
    //.....
        .setPositiveButton("OK",new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog,int id) {
                func.run();
            }
          });
}

好吧,既然Java中没有Delegates(哦,我好想你),那么你可以创建一个类来实现一个接口,可能是可运行的或一些自定义接口,然后通过接口调用你的方法。

最简单的方法是使用
可运行的
让我们看看怎么做

//this function can take function as parameter 
private void doSomethingOrRegisterIfNotLoggedIn(Runnable r) {
    if (isUserLoggedIn())
        r.run();
    else
        new ViewDialog().showDialog(MainActivity.this, "You not Logged in, please log in or Register");
}
现在让我们看看如何将任何函数传递给它(我不会使用lambda表达式)

让我们传递另一个函数

Runnable r = new Runnable() {
                @Override
                public void run() {
                    if(!this.getClass().equals(MyProfileActivity.class)) {
                        MyProfileActivity.startUserProfileFromLocation( MainActivity.this);
                        overridePendingTransition(0, 0);
                     }
                }
            };
doSomethingOrRegisterIfNotLoggedIn(r);

就是这样。快乐的大思考…

函数不是Java中的一流对象。除此之外,为什么不能在需要的地方调用所需的方法呢?请使用接口。一些示例:创建该方法所属类的对象,并在带有对象引用的对话框中简单地调用它检查我的,如果我需要返回值怎么办?@nmtuan使用可调用的?
Runnable r = new Runnable() {
                @Override
                public void run() {
                    if(!this.getClass().equals(MyProfileActivity.class)) {
                        MyProfileActivity.startUserProfileFromLocation( MainActivity.this);
                        overridePendingTransition(0, 0);
                     }
                }
            };
doSomethingOrRegisterIfNotLoggedIn(r);