用参数运行吗? [重复]

问题

这个问题在这里已有答案:

  • 如何将参数传递给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函数,返回对象本身并使用它初始化参数。