2012-02-23 66 views
2

我創建的小工具,它可以幫助我整理我的地圖由值(基於StackOverflow的答案之一給予信貸):泛型發出建立

public static <K, V extends Comparable> Map<K, V> sortMapByValues(Map<K, V> original) { 
    final ValueComparator<K, V> comparator = new ValueComparator<K, V>(original); 
    final Map<K, V> sorted = new TreeMap<K, V>(comparator); 
    sorted.putAll(original); 

    return sorted; 
} 

而且ValueComparator

static class ValueComparator<K, V extends Comparable<V>> implements Comparator<K> { 
    private final Map<K, V> base; 

    public ValueComparator(Map<K, V> base) { 
     this.base = base; 
    } 

    public int compare(K a, K b) { 
     return base.get(b).compareTo(base.get(a)); 
    } 
} 

現在,在我的IntelliJ 10 IDE中,這項工作非常好,代碼運行並按照我的期望執行。

但是,如果我試圖通過命令行Maven構建項目中,我得到以下錯誤:

type parameter V is not within its bound 

錯誤被認爲是對sortMapByValues的第一行()方法

我在IDE中使用JDK 6,我的maven編譯器插件也設置爲1.6。

任何提示讚賞

+0

你確定你正在使用的相同JDK,在兩種環境(IDE和Maven)? – 2012-02-23 14:26:03

回答

2

我想這是因爲:

V extends Comparable(在sortMapByValues)和V extends Comparable<V>ValueComparator類。

更改第一也V extends Comparable<V>

+0

好孩子!謝謝:) – 2012-02-23 14:28:56

+0

使用Oracle JDK,初始行只會生成關於原始類型使用情況的警告不是編譯錯誤 – 2012-02-23 14:29:33