带参数化的Runnable函数参数

时间:2015-05-17 09:05:44

标签: java android design-patterns

我想做一个"泛型"实现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()应执行的内容。

2 个答案:

答案 0 :(得分:1)

您要做的与rxJava对匿名类的操作类似。一般来说,他们有像actions and functions这样的通用类,你可以将这些来源用于你的目的。

答案 1 :(得分:1)

您可以按如下方式定义名为TaskExecutor的界面:

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

然后,您可以按如下方式修改ParameterizedTask课程:

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