我的日常开发记录日志
首页
  • Laravel
  • Thinkphp
  • Swoole
  • Workman
  • php
  • HTML
  • CSS
  • JavaScript
  • Vue
  • ES6
  • 小程序
  • Mysql
  • Redis
  • Es
  • MongoDb
  • Git
  • Composer
  • Linux
  • Nginx
  • Docker
  • Vpn
  • 开发实战
  • 开发工具类
  • 友情链接
💖关于
💻收藏
  • 分类
  • 标签
  • 归档数据
GitHub (opens new window)

我的日常开发记录日志

never give up
首页
  • Laravel
  • Thinkphp
  • Swoole
  • Workman
  • php
  • HTML
  • CSS
  • JavaScript
  • Vue
  • ES6
  • 小程序
  • Mysql
  • Redis
  • Es
  • MongoDb
  • Git
  • Composer
  • Linux
  • Nginx
  • Docker
  • Vpn
  • 开发实战
  • 开发工具类
  • 友情链接
💖关于
💻收藏
  • 分类
  • 标签
  • 归档数据
GitHub (opens new window)
  • laravel

  • thinkphp

  • swoole

  • workman

  • php

  • gpt

  • java

    • map和list遍历
    • 基本的类
    • 静态方法和属性
    • java包相关
    • 基础mvc结构
    • 注解理解
    • 泛型
      • 数据库查询
    • 后端
    • java
    窝窝侠
    2024-08-07

    泛型

    泛型(Generics)是Java语言中的一个重要特性,允许类、接口和方法在定义时使用类型参数,以便在使用时提供具体的类型。这使得代码更加灵活、可重用且类型安全。下面是对泛型的详细解释。

    # 1. 泛型的基本概念

    泛型的主要目的是在编译时提供类型安全检查,避免运行时的类型错误。它允许你定义类、接口或方法时,使用类型参数占位,具体类型在实例化时才指定。

    示例:

    // 定义一个泛型类
    public class Box<T> {
        private T value;
    
        public void setValue(T value) {
            this.value = value;
        }
    
        public T getValue() {
            return value;
        }
    }
    
    // 使用泛型类
    public class Test {
        public static void main(String[] args) {
            Box<String> stringBox = new Box<>();
            stringBox.setValue("Hello, Generics!");
            String value = stringBox.getValue();
            System.out.println(value);
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22

    # 2. 泛型的类型参数

    在泛型中,类型参数是用尖括号(< 和 >)表示的。你可以定义一个或多个类型参数。

    常用的类型参数包括:

    • T: Type(类型)
    • E: Element(元素)
    • K: Key(键)
    • V: Value(值)

    示例:

    public class Pair<K, V> {
        private K key;
        private V value;
    
        public Pair(K key, V value) {
            this.key = key;
            this.value = value;
        }
    
        public K getKey() {
            return key;
        }
    
        public V getValue() {
            return value;
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17

    # 3. 泛型类

    泛型类是指在类定义时使用了类型参数的类。类型参数可以在类的字段、方法、构造函数等地方使用。

    示例:

    public class GenericClass<T> {
        private T data;
    
        public GenericClass(T data) {
            this.data = data;
        }
    
        public T getData() {
            return data;
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

    # 4. 泛型方法

    泛型方法是指在方法定义时使用了类型参数的方法。即使在非泛型类中,也可以定义泛型方法。

    示例:

    public class GenericMethodExample {
        public <T> void printArray(T[] array) {
            for (T element : array) {
                System.out.println(element);
            }
        }
    }
    
    1
    2
    3
    4
    5
    6
    7

    # 5. 通配符

    通配符(Wildcard)是泛型的一种特性,表示未知的类型。它常用于泛型方法和泛型类中。

    • ?: 表示任何类型
    • ? extends T: 表示T或T的子类型
    • ? super T: 表示T或T的父类型

    示例:

    public class WildcardExample {
        public void printList(List<?> list) {
            for (Object obj : list) {
                System.out.println(obj);
            }
        }
    }
    
    1
    2
    3
    4
    5
    6
    7

    # 6. 泛型的优势

    1. 类型安全: 泛型可以在编译时检查类型,从而避免了运行时类型错误。
    2. 代码复用: 泛型类和方法可以与不同的类型一起使用,减少了代码的重复。
    3. 更好的代码可读性: 泛型提供了清晰的类型信息,使得代码更易于理解和维护。

    # 7. 泛型的限制

    1. 不能创建泛型数组: 由于Java的类型擦除机制,不能直接创建泛型数组。
    2. 类型擦除: Java泛型在编译后会被擦除,类型参数会被替换成Object类型,这意味着泛型的具体类型信息在运行时不可用。

    示例:

    public class GenericArrayExample {
        // 错误的代码,不能直接创建泛型数组
        // private T[] array = new T[10];
        
        // 使用 Object 类型数组来存储泛型类型
        private Object[] array = new Object[10];
    }
    
    1
    2
    3
    4
    5
    6
    7

    # 总结

    • 泛型 使得Java的集合类和其他类在编译时能够进行类型检查,提供了更好的类型安全性。
    • 泛型允许类、接口和方法在定义时使用类型参数,提高了代码的灵活性和复用性。
    • 泛型使用时需要注意类型擦除和泛型数组的限制。

    通过使用泛型,你可以编写出更加健壮和灵活的代码。

    在线编辑 (opens new window)
    上次更新: 2025/02/25, 18:30:54
    注解理解
    数据库查询

    ← 注解理解 数据库查询→

    最近更新
    01
    showprocess用法
    04-29
    02
    vue3中尖括号和冒号的使用细则
    04-29
    03
    sd使用
    02-22
    更多文章>
    🖥️

    © 2025窝窝侠 💌 豫ICP备20005263号-2 🛀 Theme by 💝 Vdoing && 小胖墩er

    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式
    ×