集合框架-引入泛型

2:泛型(掌握)

(1)泛型概述

    是一种把明确类型的工作推迟到创建对象或者调用方法的时候才去明确的特殊的类型。

(2)格式:

    <数据类型>

    注意:该数据类型只能是引用类型。

(3)好处:

    A:把运行时期的问题提前到了编译期间

    B:避免了强制类型转换

    C:优化了程序设计,解决了黄色警告线问题,让程序更安全

(4)泛型的前世今生

    A:泛型的由来

        Object类型作为任意类型的时候,在向下转型的时候,会隐含一个转型问题

    B:泛型类  

        把泛型定义在类上

        格式:public class 类名<泛型类1,...>

        注意:泛型类型必须是引用类型

    C:泛型方法

        把泛型定义在方法上

        格式:public <泛型类型> 返回类型 方法名(泛型类型...)

    D:泛型接口

        把泛型定义在接口上

        格式:public interface 接口名<泛型类型1...>

    E:泛型高级通配符

        ?

        ? extends E

        ? super    E


package cn.itcast_01;

import java.util.ArrayList;
import java.util.Iterator;

/*
 * ArrayList存储字符串并遍历
 * 
 * 我们按照正常的写法来写这个程序, 结果却出错了。
 * 为什么呢?
 *         因为我们开始存储的时候,存储了String和Integer两种类型的数据。
 *         而在遍历的时候,我们把它们都当作String类型处理的,做了转换,所以就报错了。
 * 但是呢,它在编译期间却没有告诉我们。
 * 所以,我就觉得这个设计的不好。
 * 回想一下,我们的数组
 *         String[] strArray = new String[3];
 *         strArray[0] = "hello";
 *         strArray[1] = "world";
 *         strArray[2] = 10;
 * 集合也模仿着数组的这种做法,在创建对象的时候明确元素的数据类型。这样就不会在有问题了。
 * 而这种技术被称为:泛型。
 * 
 * 泛型:是一种把类型明确的工作推迟到创建对象或者调用方法的时候才去明确的特殊的类型。参数化类型,把类型当作参数一样的传递。
 * 格式:
 *         <数据类型>
 *         此处的数据类型只能是引用类型。
 * 好处:
 *         A:把运行时期的问题提前到了编译期间
 *         B:避免了强制类型转换
 *         C:优化了程序设计,解决了黄色警告线
 */
public class GenericDemo {
    public static void main(String[] args) {
        // 创建
        ArrayList<String> array = new ArrayList<String>();

        // 添加元素
        array.add("hello");
        array.add("world");
        array.add("java");
        // array.add(new Integer(100));
        //array.add(10); // JDK5以后的自动装箱
        // 等价于:array.add(Integer.valueOf(10));

        // 遍历
        Iterator<String> it = array.iterator();
        while (it.hasNext()) {
              // ClassCastException
              // String s = (String) it.next();

              //加了泛型后不需要强制类型转换了
              String s = it.next();
              System.out.println(s);
        }

        // 看下面这个代码
        // String[] strArray = new String[3];
        // strArray[0] = "hello";
        // strArray[1] = "world";
        // strArray[2] = 10;
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZHOU_VIP

您的鼓励将是我创作最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值