Cheug's Blog

当前位置:网站首页 / JAVA / 正文

泛型

2019-04-01 / JAVA / 900 次围观 / 0 次吐槽 /

泛型的概述

            泛型的作用:把类型明确的工作提前到创建对象或者调用方法的时候。

            泛型是一种参数化类型,把类型当作参数一样的传递来明确集合的元素类型


泛型的好处

            提高安全性(将运行期的错误转换到编译期)

            省去强转的麻烦


泛型基本使用

            声明集合泛型的格式List<Student> list = new ArrayList<Student>();

            <>中必须放的是引用类型数据


泛型迭代器

            Iterator<String> iterator;

            Iterator<Student> iterator;


泛型注意事项

    1.默认声明一个泛型集合,前后类型要一至

List<Student> list1 = new ArrayList<Student>();

    2.这样声明前后类型不一至是不可以的

//不可以前面写父类,后面写子类

//List<Object> list2 = new ArrayList<Student>();

    3.集合泛型的声明,可以只声明前面的泛型,jdk1.7的新特性:菱形泛型,开发时建议还是写成前后一至

//1.6 1.5的jdk不能写菱形泛型

List<Student> list3 = new ArrayList<>();

    4.集合声明的泛型,代表此类或者子类都可以成为集合的元素,eg: Person -> Student

List<Person> list4 = new ArrayList<Person>();

    5.声明的泛型类型一定是引用数据类型(类)

//泛型是基本数据类型

//List<int> list6 = new ArrayList<int>();

List<Float> list6 = new ArrayList<Float>();


泛型的由来

                解决类型转换异常


声明泛型类和泛型方法

        声明一个泛型类

                          class Tool<T>

     

        声明泛型方法格式: public 返回类型(T) 方法名(泛型类型T 变量名)

        声明一个泛型方法(无返回值,有泛型参数)

                                     public void print(T t)

        声明一个泛型方法(有返回值,参数)

                                    public T get(int index)

        声明一个泛型属性         

                                  private T o;


泛型高级之通配符

              泛型通配符<?> 一般在声明变量类型时使用

                        任意类型,如果没有明确,那么就是Object以及任意的Java类了

                            //打印集合对象

                            public static void print(List<?> list){

                                 System.out.println(list);

                            }


           ? extends E 【E 表示父类,?表示子类】-表示泛型固定上边界

                             * addAll(Collection<? extends Person> c)

                             * 添加的集合可以是 Person类型【List<Person> list4】,或者是Person的子类【List<Student> list6】

                                                List<Person> list5 = new ArrayList<Person>(); 

                            

                            

                             * addAll(Collection<? extends Student> c)

                             * 添加的集合可以是 Student类型【List<Student> list6】,或者是Student的子类【List<Person> list4】

                                                List<Student> list5 = new ArrayList<Student>();


                ? super E 【?表示父类,E 表示子类】 -表示泛型固定下边界

                                ArrayList.sort(Comparator<? super Student> c)

        

        【? extends E 】针对存的操作

        【? super E】 针对取的操作*/


Powered By Cheug's Blog

Copyright Cheug Rights Reserved.