Java中的泛型

来源:互联网 发布:php 微信开发 编辑:程序博客网 时间:2024/06/07 23:11


  【先写个例子,帮助理解泛型的格式】

ArrayList<String> list = new ArrayList<String>();//【标准格式】
 ArrayList<Object> list = new ArrayList<String>();  //false
 ArrayList<String> list = new ArrayList<Object>();  //false
 
 【允许的,为了照顾新老版本问题 】 Android开发中
 ArrayList list3 = new ArrayList<String>(); true 语法没有问题, 但是会报警告
 ArrayList<String> list2 = new ArrayList(); true 语法没有问题, 但是会报警告

*********************************************************************************************

集合中的泛型

   在集合的代码中,有两个很特殊东西
    <? extends E>
    <? super E>
   E 是泛型
   extends 继承
   super 调用父类方法的关键字
   ? 通配符
   
   需求1:定义一个函数可以接受任意类型,但是这个任意类型必须是数值类型
     也就是Number类或者Number的子类
     
   这里约束的是【泛型的上限】
  Integer extends Number
  Float extends Number
  Double extends Number
  
  ? extends Number
  
  上限:
   ? extends 要求的数据类型,这里要求能够使用的数据类型是要求数据类型本身或者其子类数组
 
 需求2: 定义一个函数只能接受Integer类型或者其父类类型的集合
 
  下限:
   ? super 要求的数据类型  这里要求能够使用的数据类型是要求的数据类型本身及其父类
   
 泛型中通配符:
  ?

************************************************************************************************************

自定义泛型

泛型的运用: 
   需求:
    定义一个方法,可以接收任意类型的参数,而且要求返回值类型也是接收的数据类型
    例如:接收String  返回String
      接收int 返回int
     
   自定义泛型!
    定义一个标识符!,格式   <大写字母>
    
  1.在函数中使用泛型格式:
   修饰符  <声明自定义泛型的占位符>  返回值类型//返回值也可以是泛型  函数名(自定义泛型 参数列表, 其他数据类型 参数列表) {
   
   }
   
   泛型中不能直接使用基本数据类型,都是有对应的包装类型
   byte   --> Byte
   short  --> Short
   int    --> Integer
   long   --> Long
   
   double --> Double
   float  --> Float
   
   boolean --> Boolean
   
   char --> Character

2.类使用泛型

在自定义类中使用自定义泛型
  class 类名<自定义泛型> {
   //在这里所用用到和类名一致的自定义泛型的位置,都是相同的数据
  }
 
 注意:
  1. 类名中声明了自定义泛型的情况下,如果该类中使用了和类名自定义相同的泛型,不能用到
  static修饰的方法中  【在static修饰的方法中不能使用类名声明的自定义泛型】
  
  2. 当一个类使用了自定义泛型,在创建该类的对象的时候,给予了泛型的具体类型,那么在这个类
  当中所有使用到这个泛型的位置都会变成这个具体的数据类型
  
  3. 如果一个要求有泛型的类对象,在创建的时候没有给予具体的数据类型,所有使用到该泛型的
  位置都会变成Object
  
 [问题]
 在一个用泛型修饰的类当中,static修饰的方法,能否使用泛型???
 如果是static修饰的方法, 指定使用当前方法自定义的泛型

3.接口中使用自定义泛型
  
  interface 接口名<自定义泛型> {
   成员变量; //public static final
   成员方法; //abstract
  }
  
  注意事项:
  ( 1). 如果一个类【遵从】接口,而且这个接口是带有自定义泛型的,那么这个类就是要在类名之后加上对应
   泛型
   (2). 如果一个类【遵从】接口,而且这个接口是带有自定义泛型的,那么里面所有【遵从】接口要完成的方法
   使用到的泛型,都是接口规定的泛型
   
   (3.) 有两种【遵从】方式,第一种:使用泛型【遵从】       第二种:【遵从】的时候,给定具体的数据类型
   
         PlanA:
                 这个泛型的具体数据类型是通过用户创建该类的对象时提供的,可以更加具体的使用情况,做成
                 不同的数据类型
         PlanB:
                 这个泛型在【遵从】时已经确定,那么这个泛型意义不大
    
   [推荐使用PlanA,根据实际情况,确定泛型的类型}




原创粉丝点击