zoukankan      html  css  js  c++  java
  • 泛型

    一、泛型

          定义:在jdk1.5版本以上,java为了解决集合中不同对象类型带来的安全隐患, 而产生的类型安全机制。

                   使用方法:

            在创建集合的时候,在集合类型后面加上尖括号<>,括号中写上集合中准备传入的对象(元素)类型,
          for example: ArrayList<String> al = new ArrayList<String>();
                 LinkedList<String> ll = new LinkedList<String>();
                   HashSet<String> hs = new HashSet<String>();
                   TreeSet<String> ts = new TreeSet<String>(new Comparator());
                  (TreeSet中,自定义比较器在接口声明后面也可以加<>来传入类型参数
                    class MyComparator inplements Comparator<String> )

            同时在获取迭代器的时候,也应当在叠加器后加上尖括号<>,括号中声明与对应集合中相同的对象(元素)类型。
            for example: ListIterator<String> li = al.listIterator();
                    ListIterator<String> li = ll.listIterator();
                    Iterator<String> it = hs.iterator();
                    Iterator<String> it = ts.Iterator();

            在集合框架中,泛型比较常见,只要见到了<>就应当定义泛型, 其实<>及时用来接收类型的。
            在使用集合的时候,将集合中要存储的引用数据类型作为参数传递到<>中即可。

            好处1、将运行时期产生的ClassCastException,转移到了编译时期,使得程序员解决问题,让运行时期问题减少,安全。
            好处2、避免了强制转换的麻烦。


    二、自定义泛型类。

          在我们自定义的类中,当类中要操作的引用数据类型不确定时,为了提高程序的扩展性,而进行的步骤。
          在jdk1.5之前,我们使用Object类来提高程序的扩展性、
          而现在,我们可以使用 泛型类 来提高程序的扩展性。

              就是在定义的类名后面加<>,而括号中声明泛型。
        for example: class Tool<T>
              {
                private T t;
                public void setT(T t)
                {
                    this.t = t;
                }
              }
          在实例化该类对象时,在类名后面T处,指定该对象要操作的方法。

          Tool<String> t = new Tool<String>();


    三、自定义泛型方法。

          泛型类定义的泛型,在整个类中有效,如果这个类型要被方法使用,那么泛型类的对象明确要操作的具体类型后,所有的要操作类型都已经固定了。
        未了让不同方法可以操作不同类型,而且类型还不确定,那么可以将泛类型定义到方法上。定义位置呢在返回值前面

          如: public <T> void show(T t){} : 之后能传入所有引用类型。

        注: 静态方法不能访问类上定义的泛型, 如果静态方法操作的引用类型不确定,那么可以将泛型定义在方法上。

        如: public static <T> void method(T t){} :之后能传入操作所有引用类型。




    四、自定义泛型接口。

        与泛型类相似, 例子: interface Inter <T> { void method(T t); }
        其实现类,可以传入类型参数: class IntIple implements Inter<String> {public void method(String str){}}
             也可以不传入参数: class IntIple<T> implements Inter<T> {public void method(T t){} }


    五、泛型类的高级应用。

        通配符: <?>,也可以理解为占位符,表示在此处应当传入的引用参数类型不确定。

          泛型的限定:<? extends T> :表示该处可以传入类型T,或者T的子类型: 上限限定
                <? super T> :表示该处可以传入类型T,或者T的父类型: 下限限定

  • 相关阅读:
    linux命令: mount
    梳理一下uboot是如何从nandflash挂载文件系统的
    MDK的优化应用
    面向对象设计思想:面向对象设计的基本原则
    问题
    nodejs安装不了和npm安装不了的解决方法
    []: secureCRT连接ubuntu问题- The remote system refused the connection
    字符设备驱动[深入]:linux cdev详解
    使用MDK将STM32的标准库编译成lib使用
    liteos任务(二)
  • 原文地址:https://www.cnblogs.com/soficircle/p/6671142.html
Copyright © 2011-2022 走看看