浅谈java之泛型

系列文章目录

文章目录


一、泛型的概念:

Java泛型(generics)是 JDK5 中引入的一个新特性,泛型提供了编译时类型安全检测机制,该机制允许在编译时检测到非法的类型数据结构。

  • 泛型的本质就是参数化类型,也就是所操作的数据类型被指定为一个参数(指定参数类型

  • 泛型相当于提供了一个安全限制,不符合类型转换的会报错

泛型类的使用

泛型类的定义语法:

sql 复制代码
class 类名称 < 泛型标识,泛型标识 ,... > {
	private 泛型标识 变量名;
	....
}
  • 泛型标识可以理解为类型的形参常用的泛型标识:
  • T 、 E 、 K 、 V
    E ----Element(在集合中使用,因为集合中存放的是元素)
    T ----Type(Java类)
    K ----Key(键)
    N ----Number(数值类型)
    V ----Value(值)
java 复制代码
/*
泛型类的定义:
    <T> 泛型标识--类型形参
     T 创建对象的时候里指定具体的数据类型
 */
public class Test02 <T>{
    // T 是由外部使用类的时候来指定
    private T key;
    
    public Test02 (T key) {
        this.key = key;
    }
   
    public T getKey(){
        return key

泛型类的使用语法:

  • 使用语法:

    类名<具体的数据类型> 对象名 = new 类名 <具体的数据类型>();

  • Java1.7以后,后面的<>中的具体的数据类型可以省略不写

    类名<具体的数据类型> 对象名 = new 类名<>();

以上两种写法格式效果一样

java 复制代码
/*
泛型类的定义:
    <T> 泛型标识--类型形参
     T 创建对象的时候里指定具体的数据类型
 */
public class Test02 <T>{
    // T 是由外部使用类的时候来指定

    public static void main(String[] args) {
        //泛型类在创建对象的时候,来指定操作的具体数据类型
        Test02<String> strTest = new Test02<>("abc");//只能传指定的类型数据,不然会报错
        String key1 = strTest.getKey();
        System.out.println(key1);//abc
        //定义一个泛型类,可以操作不同的数据类型,减少了转换,提高了代码的复用率
        Test02<Integer> intTest = new Test02<>(100);//只能传指定的类型数据,不然会报错

泛型类注意事项:

  • 1.泛型类,如果没有指定具体的数据类型,此时操作类型是Object;
  • 2.泛型的类型参数只能是类类型,不能是基本数据类型;
  • 3.泛型类型在逻辑上可以看成是多个不同的类型,但实际上都是相同类型;

泛型接口

  • 语法:
cpp 复制代码
interface 接口名称 <泛型标识,泛型标识,...> {
	泛型标识 方法名();
	   ...
}
  • 泛型接口的使用: ◦实现类不是泛型类,接口要明确数据类型;

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

相关推荐
魔力女仆2 分钟前
分享一个 JS 鼠标跟随贪吃蛇背景库
开发语言·javascript·计算机外设
都叫我大帅哥22 分钟前
Java日期时间三十年战争:从Date考古到LocalDateTime革命,以及数据库与前端的那点事儿
java
Muscleheng31 分钟前
SpringBoot 集成 DeepSeek 实现 RAG 文档问答
java·spring boot·ai·springai
2401_894915531 小时前
GEO 搜索优化完整源码从零部署:环境配置、集群搭建全流程
开发语言·python·tcp/ip·算法·unity
2501_936415691 小时前
可变参数&综合练习&斗地主游戏
java·windows·游戏
麻瓜老宋1 小时前
AI开发C语言应用按步走,表达式计算器calc的第二十二步,分号赋值链式修复、TOKEN_ASSIGN
c语言·开发语言·atomcode
极客先躯2 小时前
高级java每日一道面试题-2026年05月03日-实战篇[Docker]-如何实现容器化环境的数据加密?
java·运维·docker·容器·金融·加解密·高级面试
xqqxqxxq3 小时前
Java Socket 多人聊天室(私聊+群聊)技术笔记(V4版本)
java·网络·笔记
wang09073 小时前
自己动手写一个spring之aop_1
java·后端·spring
颜x小3 小时前
[C#] C++与c#语法对比
开发语言·c++·c#