泛型使用

一、泛型的概述
泛型的格式:
<具体的数据类型>
使用格式:
ArrayList<限定集合中的数据类型>  list = new  ArrayList<限定集合中的数据类型>();
说明:给集合加泛型,就是让集合中只能保存具体的某一种数据类型。
<ignore_js_op> 
说明:由于创建ArrayList集合的时候就已经限定集合中只能保存String类型的数据,所以编译的时候保存其他的数据类型就会报错,
这样就达到了我们上述保存数据的目的了。
二、泛型的好处

  • 将运行时期的ClassCastException,转移到了编译时期变成了编译失败。
  • 避免了类型强转的麻烦。

 

[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
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的父类类型。

  • 意义: 只能接收该类型及其父类型


更多Java学习资料可关注:gzitcast

posted @ 2020-03-18 08:52  幽暗森林之猪大屁  阅读(152)  评论(0)    收藏  举报