带有函数参数的参数化 Runnable

Parameterized Runnable with function parameter

我想制作一个 "generic" class 实现 Runnable 并具有一些参数,包括功能。我是这样开始的:

public static class ParameterizedTask implements Runnable {
    private String log;
    //other parameters

    @Override
    public void run() {
        //do stuff with parameters
    }

    //getters and setters

此外,我希望能够传递一个特定的函数,它可以使用其他参数。 此函数将在run()中使用。

我想使用 Callable,但我不知道如何完成它。

我的目标是拥有一个通用的 Runnable,我可以在 Android 中使用它来从线程内部显示 AlertDialog(这就是为什么我需要 HandlerRunnable).

你有什么想法吗?我想做那样的事情:

Utils.ParameterizedTask task = new Utils.ParameterizedTask();
task.setLog(...).setRandomParam(...).setFunction(<Stuff with parameters);
Handler handler = new Handler(Looper.getMainLooper());
handler.post(task);

这里,<Stuff with parameters>代表run()应该执行什么。

您想做的与 rxJava does with anonymous classes. In general they have generic classes like actions and functions 相似,您可以将此资源用于您的目的。

您可以定义一个名为 TaskExecutor 的接口,如下所示:

public interface TaskExecutor {
   public void execute(String log)     
}

然后您可以按如下方式修改您的 ParameterizedTask class :

public static class ParameterizedTask implements Runnable {
    private String log;
    //other parameters

    private TaskExecutor taskExecutor;

    public  ParameterizedTask(TaskExecutor taskExecutor) {
       this.taskExecutor = taskExecutor;
    }

    @Override
    public void run() {
        taskExecutor.execute(log);
    }
}

然后您可以定义要在 run 方法内执行的不同行为,如下所示:

ParameterizedTask task = new ParameterizedTask(new TaskExecutor() { 
        public void execute(String log) {
              //doSomething with the log
        }
   }
);