A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小黑子 中级黑马   /  2014-10-8 16:28  /  2149 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 小黑子 于 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



评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 加油。

查看全部评分

13 个回复

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

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 赞一个!

查看全部评分

回复 使用道具 举报
泛型不是不考了吗。。
回复 使用道具 举报
liaorubei 发表于 2014-10-8 17:09
因为Collections.sort()方法是要求有一个泛型限定的,但是你的这个静态方法没有做泛型限定,你输入的泛型范围 ...

这样啊,谢谢啊。哎感觉自己不懂的还是太多了。
回复 使用道具 举报
在学野马 发表于 2014-10-8 17:14
泛型不是不考了吗。。

不考?不知道啊?哪里还有考试大纲?
回复 使用道具 举报
小黑子 发表于 2014-10-8 17:17
不考?不知道啊?哪里还有考试大纲?

泛型不是属于高新吗  
回复 使用道具 举报
在学野马 发表于 2014-10-8 17:18
泛型不是属于高新吗

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

恩 也对
回复 使用道具 举报
水竹 中级黑马 2014-10-8 18:39:35
9#

基础视频里面也有讲泛型的吧?反正我看的那个25天的视频里面有啊
回复 使用道具 举报
liaorubei 发表于 2014-10-8 17:09
因为Collections.sort()方法是要求有一个泛型限定的,但是你的这个静态方法没有做泛型限定,你输入的泛型范围 ...

受教了!
回复 使用道具 举报
Imp_x 高级黑马 2014-10-8 23:51:04
11#
进来学习一下{:3_66:}
回复 使用道具 举报
liaorubei 发表于 2014-10-8 17:09
因为Collections.sort()方法是要求有一个泛型限定的,但是你的这个静态方法没有做泛型限定,你输入的泛型范围 ...

关于泛型限定不是很懂,求问为什么楼主的代码Collections.sort()改放到主方法中就可以了呢?
回复 使用道具 举报
过来学习一下
回复 使用道具 举报
华谦 来自手机 中级黑马 2014-10-11 23:29:14
14#
你直接把泛型去掉
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马