黑马程序员技术交流社区

标题: 关于泛型的一个问题,编译过不了! [打印本页]

作者: 黑马张平    时间: 2012-4-11 14:59
标题: 关于泛型的一个问题,编译过不了!
import java.util.*;

class GenericDemo
{
        public static void main(String[] args)
        {
                ArrayList<String> al=new ArrayList<String>(new MyCompare());
                al.add("asd001");
                al.add("asd021");
                al.add("asd022223");
                al.add("asd0111114");
//                al.add(4);
                for (Iterator<String> it=al.iterator();it.hasNext() ; )
                {
                        String s=(String)it.next();
                        sop(s.length());
                }
        }
        public static void sop(Object o)
        {
                System.out.println(o);
        }
}
class MyCompare implements Comparator<String>
{
        public int compare(String s1,String s2)
        {
                int num=new Integer(s1).compareTo(new Integer(s2));
                if (num==0)
                {
                        return s1.compareTo(s2);
                }
                return num;
        }
}



GenericDemo.java:7: 错误: 对于ArrayList(MyCompare), 找不到合适的构造器
                ArrayList<String> al=new ArrayList<String>(new MyCompare());
                                     ^
    构造器 ArrayList.ArrayList(Collection<? extends String>)不适用
      (无法通过方法调用转换将实际参数MyCompare转换为Collection<? extends String>
)
    构造器 ArrayList.ArrayList()不适用
      (实际参数列表和形式参数列表长度不同)
    构造器 ArrayList.ArrayList(int)不适用
      (无法通过方法调用转换将实际参数MyCompare转换为int)
1 个错误

作者: 黑马张平    时间: 2012-4-11 15:00
请帮帮忙看看!
作者: 黑马张平    时间: 2012-4-11 15:12
改成这样。问题己解决!

import java.util.*;

class GenericDemo2
{
        public static void main(String[] args)
        {
                TreeSet<String> al=new TreeSet<String>(new MyCompare());
                al.add("asd");
                al.add("asd021");
                al.add("asd022223");
                al.add("asd0111114");

                for (Iterator<String> it=al.iterator();it.hasNext() ; )
                {
                        String s=(String)it.next();
                        sop(s.length());
                }
        }
        public static void sop(Object o)
        {
                System.out.println(o);
        }
}
class MyCompare implements Comparator<String>
{
        public int compare(String s1,String s2)
        {
//                String s1=(String)o1;
//                String s2=(String)o2;
                int num=new Integer(s1.length()).compareTo(new Integer(s2.length()));
                if (num==0)
                {
                        return s1.compareTo(s2);
                }
                return num;
        }
}
作者: 未长法    时间: 2012-4-11 15:41
ArrayList  的构造函数中没有能够添加比较器的构造函数,因此会出现以上的错误。而TreeSet 的构造函数中可以添加构造器,TreeSet(Comparator<? super E> comparator)  因此
可以把ArrayList 改成TreeSet  ,在你的MyCompare 比较器中int num=new Integer(s1).compareTo(new Integer(s2)) 比较会出现 java.lang.NumberFormatException异常,所以应该比较的是长度  int num=new Integer(s1.length()).compareTo(new Integer(s2.length()))。






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