Java泛型——帮助你更好的读懂源码<dog>

news2024/11/20 2:30:23

泛型

泛型就相当于集合的标签,我们在使用集合<>的时候,就是在使用泛型

要知道的是在jdk1.5以前我们只能把集合中的元素设计为Object,之后引入了泛型的概念来解决,我们把元素的类型设计成一个参数,这个类型参数就叫做泛型。

为啥要有泛型

我们假设没有泛型会出现哪种情况,Object类型,是不是啥都能存放?少了限制

package fanxing;

import java.util.ArrayList;

public class text01 {
    public static void main(String[] args) {
        ArrayList id = new ArrayList<>();
        id.add(1);
        id.add(2);
        id.add(3);
        id.add(4);
        id.add("ymm");//误存放
        for(Object obj : id){
            System.out.println(obj);
        }
    }
}

在这里插入图片描述
缺点:集合中可能出现不同类型的数据,不便于管理

添加泛型后:

package fanxing;

import java.util.ArrayList;

public class text01 {
    public static void main(String[] args) {
        ArrayList<Integer> id = new ArrayList<Integer>();
        id.add(1);//自动装箱了
        id.add(2);
        id.add(3);
        id.add(4);
        //id.add("ymm");会报错
        for(Object obj : id){
            System.out.println(obj);
        }
        for(Integer i : id){
            System.out.println(i);
        }
    }
}


优点:在编译初期就进行检查,不会出现后续的数据类型错误

在这里插入图片描述
在这里插入图片描述
就是将E给确定为Integer类型

泛型对应的数据类型:
都是引用数据类型,不能是基本数据类型,因为泛型本来就是给集合服务的,集合是引用数据类型,那么泛型自然也就是引用数据类型了,hh

简便写法:
ArrayList<Integer> id = new ArrayList<>();

泛型接口

对于初次接触泛型的小伙伴,可能有点懵,啥是泛型接口?
在这里插入图片描述
参考上面这个源码中的<E>这就是一个泛型接口,下面我们来手写一个泛型接口(学习这个东西,方便我们来看懂源码

public class Text1{

}
public class Text2<E> {
        
}
  1. Text1就是一个普通类
  2. Text2就是一个泛型类
  3. <>里面就是一个参数类型,这个类型是不确定的,起到一个占位的作用
  4. 里面像源码中一样也是引用数据类型
package fanxing;

import java.util.ArrayList;

public class text01 {
    public static void main(String[] args) {
        Text a = new Text();
        a.aa("jjjjj");
    }
    public static class Text<E> {
        int a;
        int b;
        public void aa(E a){
            System.out.println(a);
        }
    }
}

在这里插入图片描述
我们可以说是,如果在实例化的时候不指定数据类型,默认为Object类型

来看如果我们在实例化的时候指定数据类型呢?
在这里插入图片描述

package fanxing;

import java.util.ArrayList;

public class text01 {
    public static void main(String[] args) {
        Text<Integer> a = new Text();
        a.aa(1111);
    }
    public static class Text<E> {
        int a;
        int b;
        public void aa(E w){
            System.out.println(w);
        }
    }
}

在这里插入图片描述

继承中的泛型接口

package fanxing;

import java.util.ArrayList;

public class text01 {
    public static void main(String[] args) {
        Text01 son = new Text01();
        son.aa(123);
    }
    public static class Text<E> {
        public void aa(E a){
            System.out.println(a);
        }
    }
    public static class Text01 extends Text<Integer>{


    }
}

在这里插入图片描述

指定父类中的泛型,子类中无需再指定泛型,可以直接继承自父类中指定好的泛型,那么既然有指定好的,那么我们来看一下没有指定好的泛型是什么情况?
在这里插入图片描述
hh,红色报错!
如果父类不明确指定泛型,那么子类也会变成一个泛型类,这个E的类型可以在创建子类对象的时候确定
在这里插入图片描述
这像不像ArrayList中的源码呢?

泛型方法

这里有一个比较容易混淆的概念,泛型方法。
在这里插入图片描述
这是不是一个泛型方法呢?不是!并不是带泛型就是泛型方法

泛型方法的参数类型无关于当前类的泛型,我们通过下面的代码来看一下!

	public static class Text<E> {
        //不是泛型方法
        public void aa(E a){
            System.out.println(a);
        }
        //是泛型方法
        public <W>  void W(W b){
            
        }
    }

假设当前的类就没泛型,那么我们第一种写法就是正确的

调用泛型方法

package fanxing;

import java.util.ArrayList;

public class text01 {
    public static void main(String[] args) {
        Text t= new Text();
        t.W("j");
        
    }
    public static class Text<E> {
        //不是泛型方法
        public void aa(E a){
            System.out.println(a);
        }
        //是泛型方法
        public static  <W>  void W(W b){
            //泛型方法可以是静态方法
            System.out.println("我是泛型方法");
        }
    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/457.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【PyTorch深度学习项目实战100例】—— Pytorch时间序列电力数据多输出预测 | 第70例

前言 大家好,我是阿光。 本专栏整理了《PyTorch深度学习项目实战100例》,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集。 正在更新中~ ✨ 🚨 我的项目环境: 平台:Windows10语言环境:python3.7编译器:PyCharmPy…

1024 你学算法了吗?

&#x1f388; 作者&#xff1a;Linux猿 &#x1f388; 简介&#xff1a;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我&#xff0c;关注我&#xff0c;有问题私聊&#xff01; &…

JUC - 多线程之 单例模式(八)

单例模式&#xff08;Singleton Pattern&#xff09;是一种非常简单的设计模式之一&#xff0c;当我们使用的对象要在全局唯一时就需要用到该模式&#xff0c;以保证对象的唯一性。除此之外&#xff0c;还能避免反复的实例化对象&#xff0c;减少内存开销 单例类提供了一种访问…

踩坑记录——USB键盘睡眠唤醒

踩坑记录——USB键盘睡眠唤醒 目录踩坑记录——USB键盘睡眠唤醒前言1 USB远程睡眠唤醒要注意的几个点2 MCU唤醒之后引起USB异常的几个点结束语前言 前段时间我用一个国产MCU实现了雷蛇键盘的效果&#xff0c;按键支持十键无冲&#xff0c;RGB灯支持单控任意一个灯任意一种颜色…

SpringAMQP (RabbitMQ五种模式 消息转换器)

一、简化Hello World模型实现步骤演示 代码步骤演示如下所示&#xff1a; 消息提供者publisher代码简化&#xff1a; 消息消费者consumer代码简化&#xff1a; 二、Work Queue 工作队列模型 消息提供者代码如下所示&#xff1a; 消息消费者代码如下所示&#xff1a; 消息…

SpringCloudAlibaba【六】微服务架构下的秒杀案例

背景 分布式微服务中的秒杀是怎么实现的呢&#xff1f;接着看下去吧 我们实现一个秒杀微服务&#xff0c;流程逻辑如下 项目搭建 MySQL create database if not exists demo;use demo;drop table if exists skill_goods;create table if not exists skill_goods (id bigint…

1024程序员节|【MySQL从入门到精通】【高级篇】(二十七)外连接和内连接如何进行查询优化呢?join的原理了解一波

您好&#xff0c;我是码农飞哥&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f4aa;&#x1f3fb; 1. Python基础专栏&#xff0c;基础知识一网打尽&#xff0c;9.9元买不了吃亏&#xff0c;买不了上当。 Python从入门到精通 ❤️ 2.网上优质的Python题库很少…

[面试宝典] Linux常见命令及面试题

前言&#xff1a; &#x1f604;作者简介&#xff1a;小曾同学.com,小伙伴们也可以叫我小曾&#xff0c;一个致力于测试开发的博主⛽️ 如果文章知识点有错误的地方&#xff0c;还请大家指正&#xff0c;让我们一起学习&#xff0c;一起进步。&#x1f60a; 座右铭&#xff1a;…

C语言 - 你一定能看懂的扫雷万字详解(加入了递归展开和手动标雷的功能)

C语言之扫雷详解&#xff08;包含递归展开和手动标雷功能&#xff0c;非常强大&#xff01;&#xff09; 文章目录一.写在前面二.效果展示三.整体逻辑四.详解1.进入主函数&#xff0c;打印菜单&#xff0c;玩家作出选择2.定义棋盘的数组并进行赋值3.棋盘的展示4.随机布雷5.开始…

前端开发入门--html--Flask

快速开发网站 pip install flaskfrom flask import Flaskapp Flask(__name__)# 创建了网址 /show/info 和 函数index 的对应关系 # 以后用户在浏览器上访问 /show/info&#xff0c;网站自动执行 index app.route("/show/info") def index():return "中国联通&…

TPH-YOLOv5 | 基于Transformer的YOLOv5小目标检测器 | 四头加注意力

论文地址&#xff1a;https://arxiv.org/pdf/2108.11539.pdf 项目地址&#xff1a;https://github.com/cv516Buaa/tph-yolov5 在无人机捕获的场景中进行对象检测是最近的一项热门任务。由于无人机总是在不同的高度航行&#xff0c;物体尺度变化剧烈&#xff0c;给网络优化带来…

NMEA协议解析

文章目录一、NMEA0183协议1、NMEA基本框架2、常用语句1&#xff09;GNGGA2&#xff09;GNGLL3&#xff09;GNGSA4&#xff09;GPGSV5&#xff09;GNRMC6&#xff09;GNVTG7&#xff09;GNZDA8&#xff09;PAIRCLK等二、异或校验和代码1、网址在线计算BCC2、BCC校验和代码一、NM…

Java语言中的异常处理

异常处理 在java语言中&#xff0c;很机智的将异常作为对象来处理&#xff0c;而且定义一个基类java.lang.Throwable作为所有异常类的父类。在这许多类中一般分为两大类&#xff1a; 错误类(Error)和异常类&#xff08;Expception&#xff09;。 如图&#xff1a; 注&#xf…

iNOF在现实网络中的运用,以带反射器的iONF为例

定义 iNOF&#xff08;Intelligent Lossless NVMe Over Fabric&#xff0c;智能无损存储网络&#xff09;是指通过对接入主机的快速管控&#xff0c;将智能无损网络应用到存储系统&#xff0c;实现计算和存储网络融合的技术。 目的 网络转发设备用于传输流量&#xff0c;不同类…

竞争不是内卷,用头脑学习,而非时间

文章目录 用头脑学习&#xff0c;而非时间 前言 一、自由竞争不是内卷 二、内卷都在哪些行业 三、高效学习来大数据梦想联盟 用头脑学习&#xff0c;而非时间 前言 大多数人不懂&#xff0c;不会&#xff0c;不做&#xff0c;才是你的机会&#xff0c;你得行动&#xff…

【Queue】- 从源码分析ArrayDeque及其常用方法

文章目录概述ArrayDeque基础知识ArrayDeque内部结构ArrayDeque的构造方法ArrayDeque的扩容操作ArrayDeque常用方法将ArrayDeque作为双端队列使用时public void addFirst(E e)public void addLast(E e)public boolean offerFirst(E e)public boolean offerLast(E e)public E pol…

动态SLAM论文归纳

持续更新&#xff0c;持续更新 2022 Multi-modal Semantic SLAM for Complex Dynamic Environments 作者&#xff1a;Han Wang, Jing Ying Ko and Lihua Xie, Fellowcode&#xff1a;https://github.com/wh200720041/MMS_SLAM视频&#xff1a;https://www.youtube.com/watch…

web自动化测试——入门篇01

&#x1f60f;作者简介&#xff1a;博主是一位测试管理者&#xff0c;同时也是一名对外企业兼职讲师。 &#x1f4e1;主页地址&#xff1a;【Austin_zhai】 &#x1f646;目的与景愿&#xff1a;旨在于能帮助更多的测试行业人员提升软硬技能&#xff0c;分享行业相关最新信息。…

并发编程中的原子性,可见性,有序性问题

前言&#xff1a;大家好&#xff0c;我是小威&#xff0c;24届毕业生&#xff0c;在一家满意的公司实习。本篇文章是关于并发编程中出现的原子性&#xff0c;可见性&#xff0c;有序性问题。 本篇文章记录的基础知识&#xff0c;适合在学Java的小白&#xff0c;也适合复习中&am…

PyTorch(三)TensorBoard 与 Transforms

文章目录Log一、TensorBoard1. TensorBoard 的安装2. SummaryWriter 的使用① add_scalar() 的使用a. 参数说明b. 函数使用c. 使用 Tensorboard② add_image() 的使用a. 参数说明b. 使用 numpy.array() 对 PIL 图片进行转换c. 使用函数d. 改变 global_step二、Transforms1. Tra…