黑马程序员技术交流社区
标题:
关于泛型的一个问题,编译过不了!
[打印本页]
作者:
黑马张平
时间:
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