黑马程序员技术交流社区

标题: 万能滴马友,我的代码这是哪里错了? [打印本页]

作者: 小黑子    时间: 2014-10-8 16:28
标题: 万能滴马友,我的代码这是哪里错了?
本帖最后由 小黑子 于 2014-10-8 17:16 编辑

就想试试Collections中的sort()好不好用,结果出来一堆从来没见过的错误提示:'(,快吓尿了
  1. import java.util.*;
  2. import java.util.Collections.*;


  3. class CollectionsDemo
  4. {
  5.         public static void main(String[] args)
  6.         {
  7.                 ArrayList<String> al = new ArrayList<String>();
  8.                 al.add("xiao");
  9.                 al.add("cheng");
  10.                 al.add("aa");
  11.                 al.add("kkkkkkk");
  12.                
  13.                 sortDrill(al);
  14.         }

  15.         public static <T> void sortDrill(ArrayList<T> list)
  16.         {
  17.                 Collections.sort(list);
  18.                 for(int i =0;i<list.size();i++)
  19.                 {
  20.                         System.out.println(list.get(i));
  21.                 }
  22.         }
  23. }
复制代码
编译后提示如下:

D:\CODE\JAVA\review\day17>javac CollectionsDemo.java
CollectionsDemo.java:20: error: no suitable method found for sort(ArrayList<T#1>
)
                Collections.sort(list);
                           ^
    method Collections.<T#2>sort(List<T#2>) is not applicable
      (inference variable T#2 has incompatible bounds
        equality constraints: T#1
        upper bounds: Comparable<? super T#2>)
    method Collections.<T#3>sort(List<T#3>,Comparator<? super T#3>) is not appli
cable
      (cannot infer type-variable(s) T#3
        (actual and formal argument lists differ in length))
  where T#1,T#2,T#3 are type-variables:
    T#1 extends Object declared in method <T#1>sortDrill(ArrayList<T#1>)
    T#2 extends Comparable<? super T#2> declared in method <T#2>sort(List<T#2>)
    T#3 extends Object declared in method <T#3>sort(List<T#3>,Comparator<? super
T#3>)
1 error




作者: liaorubei    时间: 2014-10-8 17:09
因为Collections.sort()方法是要求有一个泛型限定的,但是你的这个静态方法没有做泛型限定,你输入的泛型范围比
Collections.sort()的范围大,所以是不行的.在你的静态方法上的泛型限定至少要和sort()方法的限定一样才行,
这样就可以了:
        public static <T extends Comparable<? super T>> void sortDrill(ArrayList<T> list)


作者: 在学野马    时间: 2014-10-8 17:14
泛型不是不考了吗。。
作者: 小黑子    时间: 2014-10-8 17:16
liaorubei 发表于 2014-10-8 17:09
因为Collections.sort()方法是要求有一个泛型限定的,但是你的这个静态方法没有做泛型限定,你输入的泛型范围 ...

这样啊,谢谢啊。哎感觉自己不懂的还是太多了。
作者: 小黑子    时间: 2014-10-8 17:17
在学野马 发表于 2014-10-8 17:14
泛型不是不考了吗。。

不考?不知道啊?哪里还有考试大纲?
作者: 在学野马    时间: 2014-10-8 17:18
小黑子 发表于 2014-10-8 17:17
不考?不知道啊?哪里还有考试大纲?

泛型不是属于高新吗  
作者: 小黑子    时间: 2014-10-8 17:23
在学野马 发表于 2014-10-8 17:18
泛型不是属于高新吗

不知道,我现在只是学习,对考试范围还没研究过,反正知识学了就是自己的,就算考试不考,工作说不定也能用到。
作者: 在学野马    时间: 2014-10-8 17:26
小黑子 发表于 2014-10-8 17:23
不知道,我现在只是学习,对考试范围还没研究过,反正知识学了就是自己的,就算考试不考,工作说不定也能 ...

恩 也对
作者: 水竹    时间: 2014-10-8 18:39
在学野马 发表于 2014-10-8 17:26
恩 也对

基础视频里面也有讲泛型的吧?反正我看的那个25天的视频里面有啊
作者: 〆_、Wali    时间: 2014-10-8 21:22
liaorubei 发表于 2014-10-8 17:09
因为Collections.sort()方法是要求有一个泛型限定的,但是你的这个静态方法没有做泛型限定,你输入的泛型范围 ...

受教了!
作者: Imp_x    时间: 2014-10-8 23:51
进来学习一下{:3_66:}
作者: 罗林军    时间: 2014-10-9 00:27
liaorubei 发表于 2014-10-8 17:09
因为Collections.sort()方法是要求有一个泛型限定的,但是你的这个静态方法没有做泛型限定,你输入的泛型范围 ...

关于泛型限定不是很懂,求问为什么楼主的代码Collections.sort()改放到主方法中就可以了呢?
作者: 戏言丶    时间: 2014-10-9 00:46
过来学习一下
作者: 华谦    时间: 2014-10-11 23:29
你直接把泛型去掉




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