标准Runnable
接口只有非参数化run()
方法。还有与泛型类型Callable<V>
的方法返回结果的接口。call()
我需要传递通用参数,如下所示:
interface MyRunnable<E> {
public abstract void run(E reference);
}
为此目的是否有任何标准接口,或者我必须自己声明那个基本接口?
通常,您将实现Runnable
或Callable
作为支持通用输入参数的类;例如
public class MyRunnable<T> implements Runnable {
private final T t;
public MyRunnable(T t) {
this.t = t;
}
public void run() {
// Reference t.
}
}
Java 8 包含java.util.function.Consumer<T>
带有单一非默认方法的接口void accept(T t)
。
该包中还有许多其他相关的接口。
还有com.google.common.base.Function<F, T>
来自Google Collections Guava的。
如果您将输出类型设置为?
or Void
(并始终让它返回),您可以将其用作输入参数null
的替代方案。Runnable
这具有能够用于Functions.compose
转换输入值,Iterables.transform
将其应用于集合的每个元素等的优点。
通常,如果您想将参数传递给run()
方法,您将Runnable
使用带有参数的构造函数进行子类化。
例如,你想这样做:
// code
Runnable r = new YourRunnable();
r.run(someParam);
//more code
你需要这样做:
// code
Runnable r = new YourRunnable(someParam);
r.run();
//more code
您将实现YourRunnable
类似于以下内容:
public class YourRunnable implements Runnable {
Some param;
public YourRunnable(Some param){
this.param = param;
}
public void run(){
// do something with param
}
}
我建议像在原始问题中那样定义一个接口。此外,通过使接口特定于它应该做的事情来避免弱类型,而不是像Runnable
.