1 回答
TA贡献1789条经验 获得超10个赞
在这种情况下,您通常会为您的 Matcher 提供某种工厂,它负责创建适当的线程。在 Java 8 中,您可以使用Supplier接口:
public class Matcher {
private final Supplier<? extends MatcherThread> threadSupplier;
public Matcher(Supplier<? extends MatcherThread> threadSupplier) {
this.threadSupplier = threadSupplier;
}
protected List<Integer> runAll(List<String> clusters, int nthreads) {
// …
MatcherThread task = threadSupplier.get();
task.setSubcluster(subcluster); // refactor to allow setter injection
tasks.add(task);
// …
}
}
然后,按如下方式实例化匹配器:
Matcher matcher = new Matcher(() -> new MaxLength());
这假设您添加了一个setSubcluster方法,而不是构造函数注入。或者,您也可以使用Function, 或实现您自己的工厂接口来坚持构造函数注入。
添加回答
举报