• Java泛型


    1.定义

        Java的泛型:创建集合容器时规定其允许保存的元素类型

                         然后又编译器负责添加元素的类型合法性检查,
                         在取用几何元素时则不必再进行造型处理

        例如:

    1 List list = new List();//没使用泛型之前,可以存储任何类型,
    2 //取用元素的时候也得进行造型(强制类型转换)
    3 String a = (String)list.get(1);
    4 
    5 //被附加了特别的约束条件,只能添加指定的类型的元素
    6 List<String> list = new List<String>();
    7 list.add(new Date());//报错,不能加入非String类型的元素
    8 String a = list.get(1);//不用再进行造型
    View Code

    2.泛型向后兼容

           由于泛型是JDK中后面新加入的特性,
           所以为了向过去兼容,新的编译器编译旧程序会出现警告
           可以通过使用 SuppressWarnings注解关闭编译提示信息
           eg:

     1 import java.util.*;
     2 import java.lang.SuppressWarnings;
     3 
     4 @SuppressWarnings({"unchecked"})
     5 public class TestSuppressWarnings{
     6       public static void main(String[] args){
     7              Vector v = new Vector();
     8              v.addElement("Tom");
     9              v.addElement(new Date());
    10       }
    11 }
    View Code

    3.泛型类:有类型参数修饰的类型成为泛型类

           格式:数据类型<类型参数>
           eg:
               public class Vector<E>{
                     public void addElement(E obj){

                     }
                }

           3.1.定义自己的泛型类

     1 //尖括号内的T相当于方法中的形参,可以任意取名
     2 public class Person<T>{
     3        public final int id;
     4        private T secrecy;
     5 
     6        public Person(int id){
     7              this.id = id;
     8        }
     9 
    10        public int getId(){
    11              return id;
    12         }
    13 
    14         public T getSecrecy(){
    15               return secrecy;
    16         }
    17 
    18         public void setSecrecy(T secrecy){
    19               this.secrecy = secrecy;
    20         }
    21 }
    View Code

    4.泛型进阶:

            4.1.同一个泛型类搭配不同的类型参数复合而成的类型属于同一个类
                 但却是不同的类型(总之,泛型就是一种特殊的类型)
            eg:
            Vector<String> Vector<Double> 就不是同一类型

           

            4.2.同一个泛型类于不同的类型参数复合而成的类型间并不存在继承关系
                  即使是类型参数间存在继承关系是也是如此(否则会乱套)
            eg:

    1 public class Test{
    2       public static void main(){
    3             Vector<String> v = new Vector<String>();
    4             v.add("Tom");
    5             Vector<Object> v1 = v;//尽管String是Object子类,但此处却会报错
    6             v1.add(new Date());//这里就导致v的约束String类型,所以是不允许的
    7        }
    8 
    9 }
    View Code

    5.类型通配符“?”

          使用“”作为类型参数


          5.1. Vector<?>任何泛型Vector父类型
         

          5.2. Vector<?>类型的变量在调用方法时是受限制的--凡是必须知道具体类型参数才能进行的操作均被禁止

    6.受限制的通配符(约束更严格)

         eg:
             public class Test<T extends Number>{//这里的T附加了必须继承Number类的条件
             }

  • 相关阅读:
    国税开发子系统----纳税服务子系统问题
    Hibernate中的一对一多映射和一对一映射的创建
    hibernate 创建一对一唯一外键映射的问题
    疑问,TESt中注入sessionFactory失败
    AJAX方式进行验证码的判断(JS方式)
    过滤器和拦截器的使用
    SSH框架的整合
    编码问题
    微服务架构对比
    docker安装mysql8.0连接问题,sqlyog报2058或者Navicat 1257
  • 原文地址:https://www.cnblogs.com/tommy-huang/p/4358024.html
Copyright © 2020-2023  润新知