黑马程序员技术交流社区

标题: 程序报错,求解 [打印本页]

作者: 散人online    时间: 2013-1-27 04:17
标题: 程序报错,求解
TreeMap<Character,Integer> tm = new TreeMap<Character,Integer>(
        new Comparator<Map.Entry<Character,Integer>>(){  
            
             public int compare(Map.Entry<Character,Integer> me1, Map.Entry<Character,Integer> me2){
                 int mun = me1.getValue().compareTo(me2.getValue());
                 if(mun==0)
                    return me1.getKey().compareTo(me2.getKey());
                 return mun;
             }
       });
new TreeMap然后以匿名内部类的形式传了一个比较器进去,编译报错:
找不到符号
符号: 构造函数 TreeMap(<匿名 java.util.Comparator<java.util.Map.Entry<java.lang.Character,java.lang.Integer>>>)
位置: 类 java.util.TreeMap<java.lang.Character,java.lang.Integer>
      TreeMap<Character,Integer> tm = new TreeMap<Character,Integer>(
                                      ^

作者: 黑马张英涛    时间: 2013-1-27 09:43
不知道你有没有仔细的看下API文档,
TreeMap<K,V>

TreeMap(Comparator<? super K> comparator)

比较器中参与比较的类型只能是K或者K的父类,你这个例子中
显然Map.Entry<Character,Integer>不是Character的父类,所以编译报错了。

作者: 王少雷    时间: 2013-1-27 11:03
传的时候看清参数,不要写得这么复杂分开写看得更清。
作者: 张敬培    时间: 2013-1-27 21:36
Comparable<T>,Compatator的泛型只能是一种类型,不能是两种。
在new Comparator<Map.Entry<Character, Integer>>();中你存放的是两种类型,所以会报类型转换异常




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2