我需要一个“接受参数的 Runnable”,尽管我知道这样的 runnable 并不存在。
这可能指向我的应用程序设计中的根本缺陷和/或我疲惫的大脑中的心理障碍,所以我希望在这里找到一些关于如何完成以下事情的建议, 而不会 违反基本的 OO 原则:
private Runnable mOneShotTask = new Runnable(String str) { public void run(String str) { someFunc(str); } };
知道如何完成类似上述的事情吗?
自从我最初发布这篇文章以来已经快 9 年了,老实说,从那时起 Java 已经做了一些改进。我将在下面留下我原来的答案,但人们不需要做其中的事情。9 年前,在代码审查期间,我会质疑他们为什么这样做,也许批准了,也许没有。有了现代 lambda 表达式,有如此高票数的答案推荐过时的方法是不负责任的(公平地说,一开始是可疑的......)在现代 Java 中,代码审查将立即被拒绝,这将是建议:
void foo(final String str) { Thread t = new Thread(() -> someFunc(str)); t.start(); }
和以前一样,以有意义的方式处理该线程之类的细节留给读者作为练习。但是说白了,如果你害怕使用 lambda,那你应该更害怕多线程系统。
原始答案,只是因为:
您可以在方法中声明一个类
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(); }