我想有這樣的事情(JAVA)的關鍵:谷歌番石榴函數提取了Map.Entry
class MapEntries {
private static final Function<Map.Entry<Object, Object>, Object> EXTRACT_KEY =
new Function<Map.Entry<Object, Object>, Object>() {
@Override
public Object apply(Map.Entry<Object, Object> input) {
return input.getKey();
}
}
public static <K, V> Function<Map.Entry<K, V>, K> extractKey() {
return EXTRACT_KEY;
}
}
注意EXTRACT_KEY
是一個單身,和extractKey()
使用泛型類型安全。
不幸的是,當我編寫return EXTRACT_KEY;
時,javac抱怨非法操作。我嘗試了很多變種,但似乎沒有任何工作。必須有辦法做到這一點。任何人?
編輯:
我忘了提及,在某個地方的代碼一樣,我想這樣做:
void foo(Iterable<? extends Entry<K, V>> entries) {
Iterable<T> keys = Iterables.<Entry<K, V>, K>transform(entries,
MapEntries.extractKey());
// more code follows...
}
使用(Function) EXTRACT_KEY
投解決了MapEntries編譯錯誤。然而javac的仍抱怨富():
參數化方法
<Map.Entry<K,V>, T>transform(Iterable<Map.Entry<K,V>>, Function<? super Map.Entry<K,V>,? extends K>) of type Iterables is not applicable for the arguments (Iterable<capture#13-of ? extends Map.Entry<K,V>>,
功能,對象>)
對於第二種情況,您必須使用MapEntries。 extractKey()'。 –
2013-02-09 07:42:33