2012-02-23 2 views
2

Я создал небольшую утилиту, которая помогает мне разобраться мою карту по значениям (на основе одного из StackOverflow ответов дать кредит):Дженерики проблема с Maven построить

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 код работает и выполняет то, что я ожидаю.

Но если я пытаюсь построить проект по мавена из командной строки я получаю следующее сообщение об ошибке:

type parameter V is not within its bound 

ошибка называется на первой строке sortMapByValues ​​() метод

Я использую JDK 6 в своей среде IDE, и мой плагин компилятора maven также установлен на 1.6.

Любые советы оценили

+0

Вы уверены, что вы используете один и тот же пакет JDK в обеих средах (IDE и Maven)? –

ответ

2

Я думаю, это потому, что:

V extends ComparablesortMapByValues) и V extends Comparable<V> в классе ValueComparator.

Изменение первого также V extends Comparable<V>

+0

Хороший мальчик! Спасибо :) –

+0

Использование Oracle JDK в том, что начальная строка будет генерировать предупреждение только об использовании типа исходного кода NOT error compile –

Смежные вопросы