使用Runnable作为回调/子例程的不良做法?
用作回调是否被视为不良做法?Runnable
考虑到这是为了与线程一起使用(参见它是JavaDoc),我想知道这是否可行 - 或者我是否应该为此目的制作自己的接口。Runnable
我说的是这样的:
public class KeyBinding {
public KeyBinding(KeyStroke stroke, Runnable handler) {
//...
}
}
用作回调是否被视为不良做法?Runnable
考虑到这是为了与线程一起使用(参见它是JavaDoc),我想知道这是否可行 - 或者我是否应该为此目的制作自己的接口。Runnable
我说的是这样的:
public class KeyBinding {
public KeyBinding(KeyStroke stroke, Runnable handler) {
//...
}
}
不要使用Runnable作为回调;它可能会引起混淆:人们和代码质量工具有时希望它仅用于线程。
我自己确实使用Runnable作为回调 - 我认为它似乎非常适合用作通用回调。一个月后,有人发现我的代码被截取了:
doneCallback.run();
他注意到 是 一个 ,并且调用直接导致我们的代码质量分析程序(Sonar)中的警告。因此,为了修复警告?,或者因为他认为意图是创建一个线程?,他分叉了一个新线程,并通过该线程调用。doneCallback
Runnable
.run()
run()
然而,在那里分叉一根线,破坏了东西。
为了避免混淆,现在我正在创建一个与线程没有任何关系的通用回调接口。我只是用方法添加一个类。我想我最好不要使用,因为那个也与线程有关。Callback
call
java.util.concurrent.Callback
实际上,Runnables可以用于任何目的。
“方法运行的一般契约是它可以采取任何行动”(Runnable javadoc)
一般来说,这不应该是不好的做法,绝对比在自己的代码中创建额外的不必要的接口更好的做法。