那么如何将函数作为参数传递给另一个函数,例如我想传递这个函数:
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();
}
答案 0 :(得分:16)
您可以使用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();
}
});
}
答案 1 :(得分:3)
好吧,因为Java中没有dellegates(哦C#我很想念你),你可以这样做的方法是创建一个实现接口的类,可能是runnable或者是一些自定义接口,而不是你可以调用你的方法通过界面。
答案 2 :(得分:2)
无法直接传递函数。您可以使用interface
实现作为回调机制来进行调用。
接口:
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();
...
答案 3 :(得分:0)
最简单的方法是使用runnable
让我们看看如何
//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() {
startActivity(new Intent(MainActivity.this, AddNewPostActivity.class));
}
};
doSomethingOrRegisterIfNotLoggedIn(r);
让我们传递另一个功能
Runnable r = new Runnable() {
@Override
public void run() {
if(!this.getClass().equals(MyProfileActivity.class)) {
MyProfileActivity.startUserProfileFromLocation( MainActivity.this);
overridePendingTransition(0, 0);
}
}
};
doSomethingOrRegisterIfNotLoggedIn(r);
是的,是的。快乐的大思考......