我想做一个"泛型"实现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
(这就是我需要Handler
和Runnable
的原因)。
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()
应执行的内容。
答案 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
}
}
);