黑马程序员技术交流社区

标题: 泛型类问题 [打印本页]

作者: 杨习平    时间: 2012-8-16 13:58
标题: 泛型类问题
String 是Object的子类。通过对象的多态性Object类可以接受任意引用类型的对象,为什么到了泛型中却无法使用了?
能结合几个例子讲讲吗?做好通俗易懂?如商品购物这个例子怎么联系起来讲讲?
作者: 赵方明    时间: 2012-8-16 14:06
可以使用的,但是使用Object接收String类的时候,
Object obj=new String("zhangsan01");
这里会向上转型。
接着要调用String类型的方法length()的时候,就要进行向下=转型。
String s=(Sring)obj;
obj.length();
另外,因为使用的是Object,也可以传入其它类型,比如int型,在编译时可以通过,但运行时就会发生
ClasscastException。
泛型就是作为一种安全机制出现的,它的好处
1,将异常从运行时转入编译时。提高了程序健壮性。
2,无需进行强制向下转型,提高了效率
作者: 杨宗彬    时间: 2012-8-16 14:18
Object 类是所有类父类,子类里有自己的变量和方法,父类看不见的变量和方法得。比如你说的商品购物,你要买纸,纸是所有纸类的父类,有卫生纸,书写纸等等,你存进去一个纸,你想拿到一个卫生纸,明显你行
作者: 孔肖    时间: 2012-8-16 15:11
我们用泛型的目的就是为了给元素做限定,我们需要什么类型就用什么类型
比如集合中,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>();
作者: 方志亮    时间: 2012-8-16 17:16
如果将子类泛型变为父类泛型,则表示扩大了子类的内容
以商场购物为例,现在假设把以上的两个对象Info<Object>和Info<String>分别当作商场的全部商品和个人已购买的商品信息。一个人所购买的肯定是商场中很好的一部分商品,而如果现在使用"Info<Object>=Info<String>",就相当于在个人已购买的商品加入了商场的全部商品,相当于个人把整个商场的商品全部买走了,这基本上是不可能的,所以程序无法编译通过。




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