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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© kira 中级黑马   /  2014-2-28 12:54  /  1796 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

现在需求是这样的 我下面再写一个 定义一个方法  把任意类型集合中的数据 安全的复制到相应的数组中
我写了两个方法
  1. private static <T>void copy1(Collection<T> c,T[] o){//方法1
  2.                
  3.                
  4.         }

  5.         private static <T>void copy2(T[] t ,T[] o){//方法2
  6.                
  7.                
  8.         }
复制代码

里面就不处理了 无非就是for循环 add的问题

现在是我要调用的话
  1. copy1(new Vector<String>(),new String[10]);
  2.         copy2(new Date[10],new String[10]);
  3.         copy1(new Vector<date>(),new String[10]);//报错
复制代码
张老师的视频里说 第三个会报错 是因为 泛型定义的是date 而后面的T又是String 所以报错 这个没问题

但他又说 前者是因为数组的交集 导致不报错 这里我就不明白了 数组的交集 也就是说Date和String有一个共同类型 那么这个共同类型是什么
怎么判断两数组的交集 (这两点张老师在视频里都没有提到过 只说了推断类型具有传播性 及第三个报错的原因)

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

7 个回复

倒序浏览
Date和String的共同类型是Object,所以copy2(new Date[10], new String[10]);的泛型T是Object
copy1(new Vector<date>(),new String[10]);//报错 因为泛型T是Date类型,在这里引用视频中的一句话:
<5>参数类型的类型推断具有传递性,下面第一种情况推断实际参数类型为Object,编译没有问题,而第二种情况则根据参数化的Vector类实例将类型变量直接确定为String类型,编译将出现问题:copy(new Integer[5],new String[5]) --> static <T> void copy(T[] a,T[]  b); copy(new Vector<String>(), new Integer[5]) --> static <T> void copy(Collection<T> a , T[] b);

泛型同样把我搞得很晕~~

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
一年_Hei 来自手机 中级黑马 2014-2-28 14:34:38
藤椅
copy2方法中传入的两个参数没有没有实例华参数类型。所以会找两个参数的最大交集作为泛型的实例参数类型
回复 使用道具 举报
lixiuliang 发表于 2014-2-28 13:36
Date和String的共同类型是Object,所以copy2(new Date[10], new String[10]);的泛型T是Object
copy1(new Ve ...

原来如此 话说泛型简单的用起来觉的没多难 但是深入研究的确很费力
回复 使用道具 举报
一年_Hei 发表于 2014-2-28 14:34
copy2方法中传入的两个参数没有没有实例华参数类型。所以会找两个参数的最大交集作为泛型的实例参数类型 ...

:L这点我懂 我想问的是如何推测是什么交集 不过我差不多明白了 谢了
回复 使用道具 举报
午夜b'Boy 来自手机 中级黑马 2014-2-28 22:54:03
地板
date与string都是object的子类,都可用To表示
回复 使用道具 举报
kira 发表于 2014-2-28 15:06
这点我懂 我想问的是如何推测是什么交集 不过我差不多明白了 谢了

我理解成“最近的共同父类”这样对么?
回复 使用道具 举报
kira 中级黑马 2014-3-1 14:09:33
8#
lixiuliang 发表于 2014-3-1 08:41
我理解成“最近的共同父类”这样对么?

我认为应该是继承范围最小的共同父类 实在不行才是Object
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马