我有以下问题:一个方法应在双功能需要两个参数 - 一个是Collection<T>
型的,另一种是T
;实际功能可实际上Collection::remove
或Collection::add
,或更复杂的操作;实际功能是用于收集的十几家和有几种类型的功能价值和收藏。这可能使用的方法定义简单的双功能做
最初没有泛型 - 有只是Collection<String>
S和要素是String
这么声明参数作为BiFunction<Collection<String>, String, Boolean>
工作得很好:
List<String> idCodes;
void visitElement(Element e,
BiFunction<Collection<String>, String, Boolean> elementOp) {
elementOp.apply(idCodes, e.getIdCode());
}
但是后来我加入其他类型的集合也发现我再也无法找到如何使用BiFunction
一般:
List<String> idCodes;
List<Integer> weights;
void visitElement(Element e,
BiFunction<...> elementOp) {
elementOp.apply(idCodes, e.getIdCode());
elementOp.apply(weights, e.getWeight());
}
但失败 - 我可以得到一个地方或另一个编译错误,不管我用什么d的类型参数,它会失败。
我的一个尝试是Collection::add
路过的时候,但实际应用的功能Collection<String>
和String
当
<T> void visitElement(Element e,
BiFunction<Collection<T>, T, Boolean> elementOp)
会失败不会;或Collection<Integer>
和int
。
然后我又接口:
interface ElementOp {
<T> boolean apply(Collection<T> collection, T item);
}
并没有那么令人惊讶的现在这个工程完全按照我想要的。所以我的问题是:
难道我真的要使用
interface ElementOp {
<T> boolean apply(Collection<T> collection, T item);
}
void visitElement(Element e,
ElementOp elementOp) {
elementOp.apply(idCodes, e.getIdCode());
elementOp.apply(weights, e.getWeight());
}
还是会以某种方式可以使用BiFunction
这种情况?
P.S.我使用Eclipse 4.3火星Java编译器,所以它可能只是这可能不是因为一些bug的在那里工作。