栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java的泛型学习笔记

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java的泛型学习笔记

一、什么是泛型

1、背景

JAVA推出泛型之前,程序员可以构建一个元素类型为Object的集合,该集合能够存储任意的数据类型对象,而在使用该集合的过程中,需要程序员明确知道存储每个元素的数据类型,否则很容易引发ClassCastException异常

2、概念

JAVA泛型是JDK5引入的一个新特性,泛型提供了编译时类型安全监测机构,该机制允许我们在编译时检测到非法的类型数据结构,泛型的本质就是参数化类型,也就是所操作的数据类型被指定为一个参数

3、好处

  1. 能够保证类型安全
  2. 消除了类型的强制转换是

4、类型

  1. E-Element (在集合中使用,因为集合中存放的是元素)
  2. T-Type (表示java类,包括基本的类和我们自定义的类)
  3. K-Key (表示键,例如map中的key)
  4. V-Value (表示值,例如map中的value)
  5. N-Number (表示数值类型)
  6. ? -  (通配符表示不确定的java类型)
二、泛型类和泛型接口

1、泛型类

a 、使用语法为 类型<具体的数据类型> 对象名=new 类名<具体的数据类型>

b、 java1.7以后,后面的具体类型可以省略不写

ArrayList dataList=new ArrayList<>();

2、泛型类的注意事项

  1. 泛型类如果没有指定具体的数据类型,此时操作的数据类型是Object
  2. 泛型类的类型参数只能是类类型,不能是基本数据类型
  3. 泛型类再逻辑上可以看成不同的类型,但实际上都是相同类型
    Generic strGeneric=new Generic<>(); 
    Generic intGeneric=new Generic<>(); strGeneric.getClass()==intGeneric.getClass(); 
    结果是true

            可以结合类型擦除进行理解,泛型参数后都是Generic

3、从泛型类派生子类

  • 子类也是泛型类,子类要和父类的泛型类型一致  class ChildGenric extends Generic
  • 子类不是泛型类,父类要明确泛型的数据类型

4、泛型接口

泛型接口的定义语法

interface 接口名称<泛型标识,泛型标识......>{

        泛型标识 方法名;

        ...........
}

5、泛型接口的使用

实现类也是泛型类,实现类要泛型接口的泛型类型一致

//泛型接口
public interface Generic{
    
    T getKey();
}


//泛型类实现泛型接口
public class Pair implements Generic{
    
    private T key;
    private V value;
    
    //构造方法
    public Pair(T key,V value){
        this.key=key;
        this.value=value;
    }

    @Override 
    public T getKey(){
        return key;
    }
    public V getValue(){
        return value;
    }

}

实现类不是泛型类,接口要明确泛型类型

public class Apple implements Generic{

    public String getKey(){
        
        return "hello"
    
    }
}
三、泛型方法

1、用法

泛型是指在调用方法的时候指明泛型的具体类型

2、语法

修饰符 返回值类型 方法名(形参列表){方法体}

public  T getType(ArrayList tList){
    return tList.get(0);
}

3、说明

  • public 与返回值中间的非常重要,可以理解为此方法为泛型方法
  • 只有声明了的方法是泛型方法,泛型类中使用了泛型的成员方法不是泛型方法
  • 表明该方法是使用泛型理性是T 此时才可以在方法中使用泛型类型T
  • 与泛型类的定义一样,此处的T可以随便写成任意标识,常见的如K,V等形式的参数常用于表示泛型

4、泛型方法与可变参数

public  void print(E... e){

        for(E e1: e){

            System.out.println(e);

        }

}

5、泛型方法总结

  • 泛型方法使方法独立于类而产生变化
  • 如果statistic方法要使用泛型的能力必须是其成为泛型方法
四、类型通配符

1、什么是类型通配符

  • 类型通配符一般是使用?代替具体的类型实参
  • 类型通配符是类型实参,而不是类型形参

2、类型通配符的上限

语法: 类/接口

要求该泛型的类型只能是实参类型或者实参类型的子类类型

3 类型通配符的下限

语法: 类/接口

要求该泛型的类型,只能是实参类型,或实参类型的父类类型

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号