本帖最后由 张飞年 于 2012-9-13 00:21 编辑
<? super E> 这是泛型的下限,也就是说对象的类型只接收E类型或者是E类型的父类类型,这里的?为通配符。下限通常在对集合中的元素进行取出操作时进行使用。
A extends B,如果泛型是<A >则能使用的方法是A自己的和继承的方法,<B>只能使用自己的方法,这没错,我们想清楚的是泛型是一种对数据类型的限制,是为了保证数据的安全操作,避免一些不必要的错误,如转换异常之类的。上限一般在存储元素的时候使用,因为这样取出都 是按照上限类型来运算的,不会出现类型安全隐患。
关于泛型的理解,暂时可以这样理解:
泛型是一种限制和检查类、方法、成员变量的数据类型的“泛泛而说的类型,相当于类型的占位符,只告诉编译器说:这里方的是一个类型,具体什么类型编译或执行的时候再自动确定吧。就是这样~~举例说明吧:
人 ren=new 人();
不加泛型时什么样的人都可以。
人<明星类型的人> ren=new 人<明星类型的人>();
加了泛型就是说我只要new一个明星类型的人类。- //泛型的重点是类型检查,如在以前的ArrayList中可以放入所有对象而不会进行类型检查,所以
- //当下面代码时会有错
- ArrayList list=new ArrayList();
- Apple a=new Apple();
- Orange o=new Orange();
- list.add(a);list.add(o);
- //当通过list.get(int index)来获取对象时,它返回的是一个Object的对象。你要进行相应的类型判断才能正确使用这个通过get返回的对象。
-
- //而泛型的好处在于,在add()方法的时候就进行了类型的检查
- //如
- ArrayList<Apple> list=new ArrayList<Apple>();
- Apple a=new Apple();
- Orange o=new Orange();
- //当list.add(a)时没问题,而list.add(o)的时候就会报错了。
-
- //这是泛型的一个好处,另外一个好处就是简化代码
- //如方法 T do(T test);中do方法能适用于大部分的数据类型。
复制代码 |