我有以下問題:一個方法應在雙功能需要兩個參數 - 一個是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的在那裏工作。