Java泛型

打印 上一主题 下一主题

主题 941|帖子 941|积分 2823

Java泛型

1.泛型概述

泛型的本质是为了参数化类型(即限制参数类型为我们指定泛型类型)
如这样:给list集合指定类型String
  1. //比如给List集合指定一个泛型(String),那么存入List集合中的元素必须要是String类型
  2. List<String> list= new ArrayList<String>();
复制代码
2.泛型的优点


  • 限制变量的类型,我们的类型是安全的(编译时的类型检测)
  • 消除源码中的强制类型转换
3.泛型分类

(1)泛型类
当我们在类中操作的引入数据类型不确定时,可以根据需要自定义泛型支持的类
下面为一个定义泛型类的例子
  1. //此处T可以写任意标识
  2. //在实例化泛型类时,必须指定T的具体类型
  3. public class Generic<T>{
  4.   //private 泛型标识 成员变量名  
  5.     private T key;   
  6.    
  7.     public Generic(T key){
  8.         this.key=key;
  9.     }
  10.    
  11.     public T set(){
  12.         return null ;
  13.     }
  14. }
复制代码
实例化泛型类
  1. Generic<String> generic1 = new Generic<String>("Hello");
  2. Generic<Integer> generic2 = new Generic<Integer>(123456);
复制代码
(2)泛型接口
泛型接口与泛型类的定义与使用基本相同,下面为定义泛型接口和实现的例子
定义:
  1. public interface Generic_interface<T,E> {
  2.      //T,E为我们指定的泛型类型,此处也是返回值和参数
  3.      public T set(T t);
  4.      public E get(E e);
  5. }
复制代码
实现:

  • 实现泛型接口的类“没有”传入泛型实参
实例代码如下:
  1. public class Generics<T,E> implements Generic_interface<T,E>{
  2.     @Override
  3.     public T set(T t) {
  4.         return null;
  5.     }
  6.     @Override
  7.     public E get(E e) {
  8.         return null;
  9.     }
  10. }
复制代码

  • 实现泛型接口的类“有”传入泛型实参
实例代码如下:
  1. public class Generics<String,Integer> implements Generic_interface<String,Integer>{
  2.     @Override
  3.     public String set(String string) {
  4.         return null;
  5.     }
  6.     @Override
  7.     public Integer get(Integer integer) {
  8.         return null;
  9.     }
  10. }
复制代码
(3)泛型方法
当我们只需关心某个方法时,我们可以直接定义泛型方法
定义与实现
  1. public class Generics{
  2.     public static<T> void set(T[] t){
  3.         for(T element:t){
  4.             System.out.println(element);
  5.         }
  6.     }
  7.     public static void main(String[] args) {
  8.         Integer[] array={1,2,4};
  9.         String[] array1={"Java","C++"};
  10.         set(array);
  11.         set(array1);
  12.     }
  13. }
复制代码
4.泛型擦除

Java泛型是一种伪泛型,Java在编译期间,所有的泛型都会被擦除(类型擦除)
比如说把泛型T擦除为Object,T extends xxx擦除为限定类型xxx
例子:
[code]List list = new ArrayList();list.add(12);//1.编译期间直接添加会报错//list.add("a");Class
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

金歌

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表