带有函数参数的参数化 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
(这就是为什么我需要 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()
应该执行什么。
您想做的与 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
}
}
);
我想制作一个 "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
(这就是为什么我需要 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()
应该执行什么。
您想做的与 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
}
}
);