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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 偷树的光头强 中级黑马   /  2019-11-14 17:13  /  1222 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

                                                              泛型使用
一、泛型的概述
泛型的格式:
<具体的数据类型>
使用格式:
ArrayList<限定集合中的数据类型>  list = new  ArrayList<限定集合中的数据类型>();
说明:给集合加泛型,就是让集合中只能保存具体的某一种数据类型。

说明:由于创建ArrayList集合的时候就已经限定集合中只能保存String类型的数据,所以编译的时候保存其他的数据类型就会报错,
这样就达到了我们上述保存数据的目的了。
二、泛型的好处
  • 将运行时期的ClassCastException,转移到了编译时期变成了编译失败。
  • 避免了类型强转的麻烦。

[Java] 纯文本查看 复制代码
public class GenericDemo2 {
	public static void main(String[] args) {
        Collection<String> list = new ArrayList<String>();
        list.add("abc");
        list.add("itcast");
        // list.add(5);//当集合明确类型后,存放类型不一致就会编译报错
        // 集合已经明确具体存放的元素类型,那么在使用迭代器的时候,迭代器也同样会知道具体遍历元素类型
        Iterator<String> it = list.iterator();
        while(it.hasNext()){
            String str = it.next();
            //当使用Iterator<String>控制元素类型后,就不需要强转了。获取到的元素直接就是String类型
            System.out.println(str.length());
        }
	}
}

注意:泛型是数据类型的一部分,我们将类名与泛型合并一起看做数据类型。
三、泛型的注意事项
  • 泛型只支持引用数据类型(类类型或接口类型等),泛型不支持基本数据类型:
ArrayList<int> list = new ArrayList<int>();//错误的
  • 泛型不支持数据类型以继承的形式存在,要求前后泛型的数据类型必须一致:

ArrayList<Object> list = new ArrayList<String>();//错误的
  • 在jdk1.7之后,泛型也可以支持如下写法:

ArrayList<String> list = new ArrayList<>();//正确的
注意:现在的开发中,泛型已经成为编写代码的规范
四、自定义泛型
在集合中,不管是接口还是类,它们在定义的时候类或接口名的后面都使用<标识符>,当我们在使用的时候,可以指定其中的类型。
如果当前的类或接口中并没有<标识符>,我们在使用的时候也不能去指定类型。
举例:比如我们之前所学习的集合ArrayList类:
new ArrayList<E>
说明:在ArrayList类上有一个泛型的参数:E
  • 泛型自定义格式:

<标识符>
这里的标识符可以是任意的字母、数字、下划线和 $ 。但是这里一般规范使用单个大写字母。
五、受限泛型
设置泛型的时候,实际上是可以任意设置的,只要是类就可以设置。但是在JAVA的泛型中可以指定一个泛型的上限下限
泛型的上限
  • 格式类型名称 <? extends 类 > 对象名称

例如:? extends Person :?代表的是一种类型,当前这个类型可以是Person本身,也可以是Person的子类。
  • 意义只能接收该类型及其子类

泛型的下限
  • 格式类型名称 <? super 类 > 对象名称

例如: ? super Student :?代表当前的类型可以是Student类型,也可以是Student的父类类型。
  • 意义只能接收该类型及其父类型




0 个回复

您需要登录后才可以回帖 登录 | 加入黑马