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);