问题
这个问题在这里已有答案:
- 如何将参数传递给Java线程? 16个答案
我需要一个"接受参数的Runnable",虽然我知道这样的runnable并不存在。
这可能指出我的应用程序设计中的根本缺陷和/或疲惫的大脑中的心理障碍,所以我希望在这里找到关于如何完成以下内容的一些建议,而不违反基本的OO原则:
private Runnable mOneShotTask = new Runnable(String str) {
public void run(String str) {
someFunc(str);
}
};
知道如何完成上述内容吗?
#1 热门回答(190 赞)
你可以在方法中声明一个类
void Foo(String str) {
class OneShotTask implements Runnable {
String str;
OneShotTask(String s) { str = s; }
public void run() {
someFunc(str);
}
}
Thread t = new Thread(new OneShotTask(str));
t.start();
}
#2 热门回答(39 赞)
你可以把它放在一个函数中。
String paramStr = "a parameter";
Runnable myRunnable = createRunnable(paramStr);
private Runnable createRunnable(final String paramStr){
Runnable aRunnable = new Runnable(){
public void run(){
someFunc(paramStr);
}
};
return aRunnable;
}
(当我使用它时,我的参数是一个整数ID,我用它来制作ID - > myRunnables的散列图。这样,我可以使用hashmap在处理程序中发布/删除不同的myRunnable对象。)
#3 热门回答(26 赞)
theView.post(new Runnable() {
String str;
@Override
public void run() {
par.Log(str);
}
public Runnable init(String pstr) {
this.str=pstr;
return(this);
}
}.init(str));
创建init函数,返回对象本身并使用它初始化参数。