黑马程序员技术交流社区

标题: 自定义的泛型方法怎么不能调用呢? [打印本页]

作者: HM张博文    时间: 2013-8-29 14:07
标题: 自定义的泛型方法怎么不能调用呢?
  1. public class FanDemo {

  2. /**
  3. * 接受一个任意类型的数组,倒序
  4. *
  5. * @param args
  6. */
  7. public static <T> void main(String[] args) {

  8. int[] arr = { 1, 2, 3, 4, 5 };
  9. mysort(arr);
  10. for (int i : arr) {
  11. System.out.println(i);
  12. }
  13. }

  14. private static <T> void mysort(T[] arr) {
  15. int start = 0;
  16. int end = arr.length - 1;
  17. while (true) {
  18. if (start >= end)
  19. break;
  20. T temp = arr[start];
  21. arr[start] = arr[end];
  22. arr[end] = temp;
  23. start++;
  24. end--;
  25. }
  26. }

  27. }
复制代码
我用泛型定义的一个给任意数组实现倒序功能的方法,结果整型数组传值进去的时候就提示出错了。第11行提示有错,类型不匹配,怪了?
作者: 张聪珉    时间: 2013-8-29 14:45
定义泛型只能用于引用数据类型,你用基本数据类型肯定不匹配啊,<T>,这个类型接收的是引用数据类型,而int是基本数据类型,当然类型不匹配了

作者: 神之梦    时间: 2013-8-29 14:53
貌似泛型只适用引用类型
你把int改为Integer就欧了
作者: HM张博文    时间: 2013-8-29 15:08
神之梦 发表于 2013-8-29 14:53
貌似泛型只适用引用类型
你把int改为Integer就欧了

改成Integer了是好了,可是,JDK5以后基本数据类型不是可以自动装箱成Integer的吗?
作者: 神之梦    时间: 2013-8-29 16:38
HM张博文 发表于 2013-8-29 15:08
改成Integer了是好了,可是,JDK5以后基本数据类型不是可以自动装箱成Integer的吗? ...

{:soso_e136:}
自动装箱只是说你把int的值赋值给Integer类型的变量时,才起作用
你这里,泛型哪知道你的int数组是可以变为Integer引用类型数组的啊

作者: HM张博文    时间: 2013-8-29 17:14
神之梦 发表于 2013-8-29 16:38
自动装箱只是说你把int的值赋值给Integer类型的变量时,才起作用
你这里,泛型哪知道你的i ...

看来JDK要升级了以后,能自动将int数组变为Integer引用类型数组才好哦,怎么不升级呢?




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