调试Java通用比较器

时间:2015-06-28 05:59:00

标签: java generics

class MyComparator<K,V> implements Comparator<Map.Entry<K,List<V>>> {

    public <Map.Entry<K,List<V>>> int compare(Map.Entry<K,List<V>> me1, Map.Entry<K,List<V>> me2) {

                V v1 = me1.getValue();
                V v2 = me2.getValue();

                if(v1.size() > v2.size())
                    return 1;
                else if(v1.size() < v2.size())
                    return -1;
                else
                     return 0;
    }
}

需要帮助。

错误:

    javacode$ javac -Xdiags:verbose Anagrams1.java
    Anagrams1.java:6: error: > expected
        public <Map.Entry<K,List<V>>> int compare(Map.Entry<K,List<V>> me1, Map.Entry<K,List<V>> me2) {
                   ^
    Anagrams1.java:6: error: '(' expected
        public <Map.Entry<K,List<V>>> int compare(Map.Entry<K,List<V>> me1, Map.Entry<K,List<V>> me2) {
                         ^
    Anagrams1.java:6: error: > expected
        public <Map.Entry<K,List<V>>> int compare(Map.Entry<K,List<V>> me1, Map.Entry<K,List<V>> me2) {
                                ^
    Anagrams1.java:6: error: < expected
        public <Map.Entry<K,List<V>>> int compare(Map.Entry<K,List<V>> me1, Map.Entry<K,List<V>> me2) {
                                 ^
    Anagrams1.java:6: error: illegal start of expression
        public <Map.Entry<K,List<V>>> int compare(Map.Entry<K,List<V>> me1, Map.Entry<K,List<V>> me2) {
                                  ^
    Anagrams1.java:6: error: <identifier> expected
        public <Map.Entry<K,List<V>>> int compare(Map.Entry<K,List<V>> me1, Map.Entry<K,List<V>> me2) {
                                     ^
    Anagrams1.java:6: error: '(' expected
        public <Map.Entry<K,List<V>>> int compare(Map.Entry<K,List<V>> me1, Map.Entry<K,List<V>> me2) {
                                          ^
    Anagrams1.java:6: error: illegal start of type
        public <Map.Entry<K,List<V>>> int compare(Map.Entry<K,List<V>> me1, Map.Entry<K,List<V>> me2) {
                                                 ^
    Anagrams1.java:6: error: ';' expected
        public <Map.Entry<K,List<V>>> int compare(Map.Entry<K,List<V>> me1, Map.Entry<K,List<V>> me2) {
                                                     ^
    Anagrams1.java:6: error: ';' expected
        public <Map.Entry<K,List<V>>> int compare(Map.Entry<K,List<V>> me1, Map.Entry<K,List<V>> me2) {
                                                                               ^
    Anagrams1.java:6: error: ';' expected
        public <Map.Entry<K,List<V>>> int compare(Map.Entry<K,List<V>> me1, Map.Entry<K,List<V>> me2) {
                                                                                                    ^
    11 errors

3 个答案:

答案 0 :(得分:3)

更改

public <Map.Entry<K,List<V>>> int compare(Map.Entry<K,List<V>> me1, Map.Entry<K,List<V>> me2)

public int compare(Map.Entry<K,List<V>> me1, Map.Entry<K,List<V>> me2)

您不应在类声明和方法声明中指定类型参数。

方法本身应该是:

public int compare(Map.Entry<K,List<V>> me1, Map.Entry<K,List<V>> me2) {

    List<V> v1 = me1.getValue(); // changed here
    List<V> v2 = me2.getValue(); // changed here

    if(v1.size() > v2.size())
        return 1;
    else if(v1.size() < v2.size())
        return -1;
    else
        return 0;
}

因为您要比较两个Map.Entry<K,List<V>>个实例,而不是Map.Entry<K,V>

答案 1 :(得分:1)

只需删除方法签名中的类型见证:

public int compare(Map.Entry<K,List<V>> me1, Map.Entry<K,List<V>> me2) {...

答案 2 :(得分:0)

更改

public <Map.Entry<K,List<V>>> int compare

public int compare