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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨习平 中级黑马   /  2012-8-16 13:58  /  1884 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

String 是Object的子类。通过对象的多态性Object类可以接受任意引用类型的对象,为什么到了泛型中却无法使用了?
能结合几个例子讲讲吗?做好通俗易懂?如商品购物这个例子怎么联系起来讲讲?

评分

参与人数 1技术分 +1 收起 理由
杨志 + 1

查看全部评分

4 个回复

倒序浏览
可以使用的,但是使用Object接收String类的时候,
Object obj=new String("zhangsan01");
这里会向上转型。
接着要调用String类型的方法length()的时候,就要进行向下=转型。
String s=(Sring)obj;
obj.length();
另外,因为使用的是Object,也可以传入其它类型,比如int型,在编译时可以通过,但运行时就会发生
ClasscastException。
泛型就是作为一种安全机制出现的,它的好处
1,将异常从运行时转入编译时。提高了程序健壮性。
2,无需进行强制向下转型,提高了效率

评分

参与人数 1技术分 +1 收起 理由
杨志 + 1

查看全部评分

回复 使用道具 举报
Object 类是所有类父类,子类里有自己的变量和方法,父类看不见的变量和方法得。比如你说的商品购物,你要买纸,纸是所有纸类的父类,有卫生纸,书写纸等等,你存进去一个纸,你想拿到一个卫生纸,明显你行
回复 使用道具 举报
我们用泛型的目的就是为了给元素做限定,我们需要什么类型就用什么类型
比如集合中,ArrayList<String> a = new ArrayList<String>();
我们用泛型的目的就是为了让集合中存入的元素都是String类型,这样就为以后操作集合提供了便利

而参数化类型不考虑类型参数的继承关系,比如
          ArrayList<String> a1 = new ArrayList<Object>();
          ArrayList<Object> a2 = new ArrayList<String>();
         这两句都是错误的!!
         因为不能说里面存的是Obiect类型,又说里面只能装String,反之亦然。
   
但是,参数化的类型 和 原始类型 是可以兼容
        例如: Collection<String> c = new ArrayList();
                 Collection c = new ArrayList<String>();

评分

参与人数 1技术分 +1 收起 理由
杨志 + 1

查看全部评分

回复 使用道具 举报
如果将子类泛型变为父类泛型,则表示扩大了子类的内容
以商场购物为例,现在假设把以上的两个对象Info<Object>和Info<String>分别当作商场的全部商品和个人已购买的商品信息。一个人所购买的肯定是商场中很好的一部分商品,而如果现在使用"Info<Object>=Info<String>",就相当于在个人已购买的商品加入了商场的全部商品,相当于个人把整个商场的商品全部买走了,这基本上是不可能的,所以程序无法编译通过。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马