广告
返回顶部
首页 > 资讯 > 后端开发 > Python >java的泛型你真的了解吗
  • 956
分享到

java的泛型你真的了解吗

2024-04-02 19:04:59 956人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录泛型的概述和优势自定义泛型类自定义泛型方法自定义泛型接口泛型通配符、上下限总结泛型的概述和优势 泛型概述 泛型:是jdk5中引入的特性,可以在编译阶段约束操作的数据类型,并进行检

泛型的概述和优势

泛型概述

泛型:是jdk5中引入的特性,可以在编译阶段约束操作的数据类型,并进行检查。
泛型的格式:<数据类型>; 注意:泛型只能支持引用数据类型。
集合体系的全部接口和实现类都是支持泛型的使用的。

泛型的好处:

统一数据类型。
把运行时期的问题提前到了编译期间,避免了强制类型转换可能出现的异常,因为编译阶段类型就能确定下来。

泛型可以在很多地方进行定义:

类后面           -->    泛型类
方法申明上    -->   泛型方法
接口后面        -->  泛型接口

自定义泛型类

泛型类的概述

定义类时同时定义了  泛型的类  就是  泛型类。
泛型类的格式:修饰符 class 类名<泛型变量(只能是引用类型)>{  }
范例:public class MyArrayList<T> {  }
 此处泛型变量T可以随便写为任意标识,常见的如E、T、K、V等。

作用:编译阶段可以指 定数据类型**(必须是引用类型)**,类似于集合的作用。

课程案例导学

模拟ArrayList集合自定义一个集合MyArrayList集合,完成添加和删除功能的泛型设计即可。

问题1:泛型类的核心思想?

把出现泛型变量的地方全部替换成传输的真实数据类型

问题2:泛型类的作用?

编译阶段约定操作的数据的类型,类似于集合的作用。

自定义泛型方法

泛型方法的概述

定义方法时同时定义了  泛型的方法  就是  泛型方法。
泛型方法的格式:修饰符 <泛型变量> 方法返回值 方法名称(形参列表){}
范例: public <T> void show(T t) {    // <T>表示参数的类型,一般在public或者static的后面 
            }
作用:方法中可以使用泛型接收一切实际类型的参数,方法更具备通用性。

课程案例导学

给你任何一个类型的数组,都能返回它的内容。也就是实现Arrays.toString(数组)的功能!

public class GeneticDemo {
    public static void main(String[] args) {
        String[] names = {"lushimeng", "yangyinyu", "wangliang", "xigua", "xiangjia"};
        printArray(names);  // 把printArray方法中出现泛型的地方全部变化为String类型
        Character[] character = {'2', 'd', 'd', 'r'};
        printArray(character);  // 把printArray方法中出现泛型的地方全部变化为Character类型
        Integer[] ages = {23, 435, 56, 67, 67};
        printArray(ages);  // 把printArray方法中出现泛型的地方全部变化为Integer类型

    }

    public static <T> void printArray(T[] array){
        if(array != null){
            StringBuilder sb = new StringBuilder("[");
            for(int i = 0; i < array.length; i++){
                sb.append(array[i]).append(i != array.length - 1 ? ", ": "");  // StringBuilder的链式编程
            }
            sb.append("]");
            System.out.println(sb);
        }else{
            System.out.println(array);
        }
    }
}

问题1、泛型方法的核心思想:

把出现泛型变量的地方  全部替换   成传输的真实数据类型

问题2、泛型方法的作用

方法中可以使用泛型接收一   切实际类型的参数,方法更具备通用性

自定义泛型接口

泛型接口的概述

使用了泛型定义的接口就是泛型接口。
泛型接口的格式:修饰符 interface 接口名称<泛型变量>{
                           }
范例: public interface Data<E>{}

课程案例导学

教务系统,提供一个接口可约束一定要完成数据(学生,老师)的增删改查操作

在这里插入图片描述

问题1、泛型接口的作用

泛型接口可以约束实现类,实现类可以在实现接口的时候传入自己操作的数据类型这样重写的方法都将是针对于该类型的操作。

泛型通配符、上下限

通配符:?

?   可以在“使用泛型”的时候代表     一切类型。
 E T K V 是在定义   泛型    的时候使用的。

泛型通配符:案例导学

开发一个极品飞车的游戏,所有的汽车都能一起参与比赛。
特别注意:虽然BMW和BENZ都继承了Car但是ArrayList<BMW>和ArrayList<BENZ>与ArrayList<Car>没有关系的!!
import java.util.ArrayList;

public class GenericDemo {
    public static void main(String[] args) {
        ArrayList<BENZ> benzs = new ArrayList<>();
        benzs.add(new BENZ());
        benzs.add(new BENZ());
        benzs.add(new BENZ());
        Go(benzs);   // ? extends Car 为Car的子类都可以传入进去

        ArrayList<BMW> bmws = new ArrayList<>();
        bmws.add(new BMW());
        bmws.add(new BMW());
        bmws.add(new BMW());
        go(bmws);

        ArrayList<Dog> dogs = new ArrayList<>();
        dogs.add(new Dog());
//        go(dogs);   // 不满足泛型上下限的条件
    }
    public static void go(ArrayList<? extends Car> car){  // 上下限

    }
}

class Dog{
}

// 父类
class Car{
}

class BENZ extends Car{
}

class BMW extends Car{
}

泛型的上下限:

?   可以在“使用泛型”的时候代表     一切类型。
 ? extends Car: ?必须是Car或者其子类     泛型上限
 ? super Car : ?必须是Car或者其父类     泛型下限

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!

--结束END--

本文标题: java的泛型你真的了解吗

本文链接: https://www.lsjlt.com/news/144258.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java的泛型你真的了解吗
    目录泛型的概述和优势自定义泛型类自定义泛型方法自定义泛型接口泛型通配符、上下限总结泛型的概述和优势 泛型概述 泛型:是JDK5中引入的特性,可以在编译阶段约束操作的数据类型,并进行检...
    99+
    2022-11-13
  • Golang中的泛型你真的了解吗
    目录什么是泛型为什么需要泛型泛型语法类型参数类型集类型推断总结Golang 在 1.18 版本更新后引入了泛型,这是一个重要的更新,Gopher 万众瞩目,为 Golang 带来了更...
    99+
    2023-05-20
    Golang泛型用法 Golang泛型学习 Golang泛型 Go 泛型
  • 关于Java Object你真的了解了吗
    导读: 在平时的coding中hashCode()和equals()的使用的场景有哪些?clone深复制怎么实现?wait()和notify()有什么作用?finalize()方法干嘛的?看似coding中使用的不多,不重要,但是有没有跟我...
    99+
    2023-05-31
    java object ava
  • Java 缓存:你真的了解它吗?
    在 Java 开发中,缓存是一个非常重要的概念。它可以大大提升应用程序的性能,减少对底层资源的占用,提高用户体验。但是,你真的了解 Java 缓存吗?本文将为大家介绍 Java 缓存的基本概念、分类、应用场景以及常见的缓存框架。 一、缓存...
    99+
    2023-10-06
    缓存 学习笔记 面试
  • C++的数据类型你真的了解吗
    目录前言1 整型2 sizeof关键字3 实型(浮点型)4 字符型5 转义字符6 字符串型7 布尔类型 bool8 数据的输入总结前言 C++不像python,创建变量的时候必须指定...
    99+
    2022-11-13
  • Python 中的单分派泛函数你真的了解吗
    泛型,如果你学过Java ,应该对它不陌生吧。但你可能不知道在 Python 中(3.4+ ),也可以实现简单的泛型函数。 在Python中只能实现基于单个(第一个)参数的数据类型来...
    99+
    2022-11-12
  • TypeScript中的接口和泛型你了解吗
    目录接口对象类型索引类型函数类型继承交叉类型接口实现interface 和 type 的区别字面量赋值枚举类型泛型泛型函数泛型接口泛型类类型约束总结接口 使用 interface 关...
    99+
    2022-11-13
  • Go语言的泛型是真泛型吗
    Go语言的泛型在设计上并不是真正的泛型。在其他编程语言中,泛型通常指的是可以在函数或数据结构中使用不特定类型的能力。然而,Go语言的...
    99+
    2023-10-12
    Go语言
  • Java和JavaScript的异同,你真的了解吗?
    Java和JavaScript是两种非常常见的编程语言,它们在很多方面有着相似的特性,但它们也有着很多不同之处。在本文中,我们将探讨Java和JavaScript的异同,并且演示一些代码示例来帮助你更好地理解它们。 Java和JavaS...
    99+
    2023-10-24
    javascript http 重定向
  • Java的代理模式你真的了解吗
    目录代理模式原理解析动态代理的原理解析代理模式的应用场景代理模式原理解析 代理模式(Proxy Design Pattern),它在不改变原始类(或者叫被代理类)代码的情况下,通过引...
    99+
    2022-11-13
  • 你真的了解Java的多线程方法吗
    目录Java 多线程方法详解startrunyieldjoinsleepInterruptdeamonPriority总结Java 多线程方法详解 start start方法&nbs...
    99+
    2022-11-13
  • 你真的了解IP地址吗?
    本文已收录于专栏 ⭐️ 《计算机网络》⭐️ 学习指南: IP协议基本认识分类地址多播地址 无分类地址划分方式子网掩码 IP 分片与重组IPv6基本认识IPv4 首部与 ...
    99+
    2023-09-09
    tcp/ip 网络 服务器 网络协议 ip
  • 你真的需要了解Bash吗?
    Bash是一种强大的命令行解释器,它是Linux和macOS操作系统上的默认Shell。尽管它是如此重要,但很多人并不了解Bash的实际用途。在本文中,我们将探讨Bash的重要性以及它如何帮助我们更好地管理和控制计算机系统。 Bash是什么...
    99+
    2023-08-15
    path bash http
  • 你真的了解Go语言中的数据类型吗?
    Go语言作为一门静态类型语言,数据类型是其非常重要的组成部分。熟悉Go语言中的数据类型,能够更好地理解和使用该语言。本文将带大家了解Go语言中的常用数据类型。 基本数据类型 Go语言中的基本数据类型包括bool、int、float、comp...
    99+
    2023-07-03
    数据类型 npm 框架
  • 一篇文章带你了解java泛型--泛型类,泛型方法,泛型接口
    目录Java 泛型Java 泛型是什么泛型类泛型类的格式泛型类举例泛型方法泛型方法的格式泛型方法举例泛型接口泛型接口的格式泛型接口举例泛型接口实现类:测试接口类:打印结果:总结Jav...
    99+
    2022-11-12
  • Java同步框架API:你真的了解它吗?
    Java是一个非常流行的编程语言,它的强大之处在于它提供了许多非常有用的API,其中包括同步框架API。同步是指多个线程在共享相同资源时需要互相协调和同步,以避免出现竞争条件和数据不一致等问题。在Java中,同步框架API提供了一些有用的...
    99+
    2023-09-05
    同步 框架 api
  • 你真的了解Java中NumPy的索引机制吗?
    Java中的NumPy是一种非常强大的数组处理工具,它可以帮助我们高效地处理大量的数据。在Java中,NumPy的索引机制是非常重要的一个概念,它可以帮助我们快速地定位和获取数组中的数据。本文将深入探讨Java中NumPy的索引机制,帮助读...
    99+
    2023-05-26
    numy numpy 索引
  • C语言的模板与泛型编程你了解吗
    目录模板与泛型编程浅谈摘要(Effective C++):模板与泛型编程简单介绍函数模板模板编译类模板为什么我们需要模板特例化?总结模板与泛型编程浅谈 摘要(Effective C+...
    99+
    2022-11-13
  • 你真的了解PHP数据类型的存储方法吗?
    PHP作为一种脚本语言,拥有着丰富的数据类型。在PHP中,数据类型的存储方法对于程序的性能和可读性都有着重要的影响。本文将介绍PHP数据类型的存储方法,并通过一些演示代码来展示它们的用法。 一、PHP数据类型的基本介绍 在PHP中,数据类型...
    99+
    2023-10-16
    数据类型 存储 教程
  • PHP接口中的数据类型:你真的理解了吗?
    当我们在进行 PHP 接口开发时,数据类型是一个非常重要的概念。虽然我们在学习编程的时候都会学习到数据类型这个概念,但是在实际开发中,我们有时候可能并没有真正理解数据类型的概念,也不知道如何正确使用它们。因此,在本文中,我们将深入探讨 PH...
    99+
    2023-06-01
    接口 学习笔记 数据类型
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作