“Java泛型” 得所憩,落日美酒聊共挥

本篇会加入个人的所谓鱼式疯言

❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言
而是理解过并总结出来通俗易懂的大白话,
小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的.
🤭🤭🤭可能说的不是那么严谨.但小编初心是能让更多人能接受我们这个概念 !!!

在这里插入图片描述

前言

不知过了多久,我们又不得不提及我们 数据结构 中必备的一个小知识———— 泛型

目录

  1. 包装类
  2. 泛型

一. 包装类

在Java中,由于基本类型不是继承自 Object

为了在 泛型 代码中可以支持 基本类型

Java 给每个 基本类型 都对应了一个包装类型

1. 基本数据类型对应的包装类

在这里插入图片描述

鱼式疯言

除了 IntegerCharacter

其余基本类型的包装类都是 首字母大写

2.装箱和拆箱

public class Test3 {
    public static void main(String[] args) {
        int i = 10;

        // 装箱操作,新建一个 Integer 类型对象,将 i 的值放入对象的某个属性中
        Integer ii = Integer.valueOf(i);
        Integer ij = new Integer(i);
        System.out.println(ij);

        // 拆箱操作,将 Integer 对象中的值取出,放到一个基本数据类型中
        int j = ii.intValue();
        System.out.println(j);

    }
}

在这里插入图片描述

当我们把一个 基本数据类型 转化为 包装类型 时就称为 装箱

当我们把一个 包装类型 转化为 基本数据类型 时就称为 拆箱

3. 自动装箱和自动拆箱


public class Test3 {

    public static void main(String[] args) {
        int i = 10;

        Integer ii = i; // 自动装箱
        Integer ij = (Integer)i; // 自动装箱
        System.out.println(ij);

        int j = ii; // 自动拆箱
        int k = (int)ii; // 自动拆箱
        System.out.println(k);

    }
}

在这里插入图片描述

自动 的含义就是 包装类类型基本数据类型 直接转化

鱼式疯言

有图有真相

在这里插入图片描述

二. 泛型

1.泛型的简介

一般的类和方法,只能使用 具体的类型: 要么是 基本类型 ,要么是自定义的

如果要编写可以应用于 多种类型 的代码,这种刻板的 限制 对代码的 束缚 就会很大。

----- 来源 《Java编程思想》泛型 的介绍。

泛型 是在 JDK1.5 引入的新的语法

通俗讲,泛型 :就是适用于 许多许多类型。从代码上讲,就是 对类型实现了参数化

2. 泛型引出

class MyArray {
public Object[] array = new Object[10];
public Object getPos(int pos) {
return this.array[pos];
}
public void setVal(int pos,Object val) {
this.array[pos] = val;
}
}
public class TestDemo {
public static void main(String[] args) {
MyArray myArray = new MyArray();
myArray.setVal(0,10);
myArray.setVal(1,"hello");//字符串也可以存放
String ret = myArray.getPos(1);//编译报错
System.out.println(ret);
}
}

在这里插入图片描述

  1. 任何类型数据 都可以存放
  1. 1号下标本身就是 字符串 ,但是确 编译报错。必须进行 强制类型转换

对于 Object 这个 父类 是可以接收所以的

但我们是无法 辨别 它传入的类是 什么类型

因为这个原因,我们的 泛型 也就 发挥用场 了 😁 😁 😁

3. 泛型的语法

class 泛型类名称 <类型形参列表> {
     // 这里可以使用类型参数
}
class ClassName <T1, T2, ..., Tn>{
}
class 泛型类名称<类型形参列表> extends 继承类/* 这里可以使用类型参数 */ {
// 这里可以使用类型参数
}
class ClassName<T1, T2, ..., Tn> extends ParentClass<T1> {
// 可以只使用部分类型参数
}

下面让小编详细解释下吧 💥 💥 💥

4. 泛型类

class MyArray<T> {
    public T[] array;
    public MyArray() {
    }
    /**
     * 通过反射创建,指定类型的数组
     * @param clazz
     * @param capacity
     */
    public MyArray(Class<T> clazz, int capacity) {
        array = (T[]) Array.newInstance(clazz, capacity);
    }
    public T getPos(int pos) {
        return this.array[pos];
    }
    public void setVal(int pos,T val) {
        this.array[pos] = val;
    }
    public T[] getArray() {
        return array;
    }

    public static void main(String[] args) {
        MyArray<Integer> myArray1 = new MyArray<>(Integer.class,10);
        Integer[] integers = myArray1.getArray();
        integers[0]=1;
        integers[1]=2;
        integers[2]=1;
        System.out.println(Arrays.toString(integers));
    }
}

在这里插入图片描述

讲我们需要的数据类型全部改成 T 类型即可

鱼式疯言

public T[] array;
    public MyArray() {
    }

这样 初始化数组 可能会有问题

小编的建议是改成以下 Object类型 更好 (记住即可)

public Object array;

		public MyArray() {
		array=new Object[10];
		}
		

泛型方法

// 两数比较的泛型方法

class Test {
    public  < T extends Comparable<T>>T Comp(T[]array){
        T max=array[0];

        for (int i = 0; i < array.length; i++) {
            if (array[i].compareTo(max)>0) {
                max=array[i];
            }
        }

        return max;
    }

    public static void main(String[] args) {
//        double []  d={12.3,18.7,72.0,11.1,1.2,88.2,44.2};
        Integer []  d={12,18,72,11,1,88,44};
        Test test=new Test();
        Integer max=test.<Integer>Comp(d);
        System.out.println(max);
    }
}

在这里插入图片描述

注意我们的泛型方法定义时必须是

 public  < T extends Comparable<T>>T Comp(T[]array)

鱼式疯言

两个基本类型比较时, 可以用 = < > 来比较

两个引用类型比较时

array[i].compareTo(max)>0

进行比较大小

总结

  1. 包装类: 认识了包装类的概念以及特点
  2. 泛型: 理解了泛型并清楚泛型的出现为我们的类型打开了多样性

可谓收获颇丰啊 💖 💖 💖 💖

如果觉得小编写的还不错的咱可支持 三连 下 ==(定有回访哦) == , 不妥当的咱请评论区 指正

希望我的文章能给各位宝子们带来哪怕一点点的收获就是 小编 创作 的最大 动力 💖 💖 💖

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode 64. 最小路径和

心路历程&#xff1a; 第一反应像是一个回溯问题&#xff0c;但是看到题目中要求最值&#xff0c;大概率是一道DP问题。并且这里面的递推关系也很明显。 这里面边界条件可以有多种处理方法。 解法&#xff1a;动态规划 class Solution:def minPathSum(self, grid: List[List…

代码随想录算法训练营第42天| 背包问题、416. 分割等和子集

01 背包 题目描述&#xff1a;有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品只能用一次&#xff0c;求解将哪些物品装入背包里物品价值总和最大。 二维dp数组01背包&#xff1a; 确定dp数组以及下标的含义 …

【aster-boot】1.快速搭建springboot3.x多模块项目

springboot3已经出来一段时间了&#xff0c;正好最近也不太忙&#xff0c;就把之前搭的架子整理了一下。   关于springboot3的介绍&#xff0c;以及它的新特性就不再赘述&#xff0c;大家自行百度。 0.前期准备 因springboot3对jdk的最低要求是jdk17&#xff0c;所以需先下载…

河海大学-海洋学院2024年硕士研究生调剂通知

一、调剂专业及计划具体调剂专业及计划可参见河海大学研究生院官网《河海大学2024年硕士研究生调剂通知》和附件。 二、调剂报名与复试要求 1.报名条件&#xff1a;调剂原则见《河海大学202 4年硕士研究生调剂通知》&#xff0c;详细要求见中国研究生招生信息网“全国硕士研究…

Redis数据库③主从复制+哨兵模式+集群模式

一.Redis主从复制 1.概念 主从复制&#xff0c;是指将一台Redis服务器的数据&#xff0c;复制到其他的Redis服务器。前者称为主节点(Master)&#xff0c;后者称为从节点(Slave)&#xff1b;数据的复制是单向的&#xff0c;只能由主节点到从节点。 默认情况下&#xff0c;每台…

【动态规划-状态压缩dp】【蓝桥杯备考训练】:毕业旅行问题、蒙德里安的梦想、最短Hamilton路径、国际象棋、小国王【已更新完成】

目录 1、毕业旅行问题&#xff08;今日头条2019笔试题&#xff09; 2、蒙德里安的梦想&#xff08;算法竞赛进阶指南&#xff09; 3、最短Hamilton路径&#xff08;《算法竞赛进阶指南》&模板&#xff09; 4、国际象棋&#xff08;第十二届蓝桥杯省赛第二场C A组/B组&#…

每日学习笔记:C++ STL算法之查询容器元素

目录 本文的API 元素计数 查找最大、最小元素 查找第一个匹配元素 查找前N个连续匹配值 查找第一个子区间 查找最后一个子区间 查找两个区间都有的元素的第一次出现的位于第一区间的位置 查找两个连续且相等的元素 本文的API count() count_if(....,op) min_element…

pbootcms模板网站饰品首饰玛瑙水晶钻石饰品玉石戒指复古珠宝饰品pbcms网站源码下载

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 pbootcms模板网站饰品首饰玛瑙水晶钻石饰品玉石戒指复古珠宝饰品pbcms网站源码下载PC版 pbootcms内核开发的网站模板&#xff0c;该模版适用于饰品首饰类企业网站&#xff0c;复古珠…

网络工程师笔记18(关于网络的一些基本知识)

网络的分类 介绍计算机网络的基本概念&#xff0c;这一章最主要的内容是计算机网络的体系结构-ISO 开放系统互连参考模型&#xff0c;其中的基本概念&#xff0c;例如协议实体、协议数据单元&#xff0c;服务数据单元、面向连接的服务和无连接的服务、服务原语、服务访问点、相…

[每天一道面试题] HTTP,FTP,TFTP的底层实现协议是什么

HTTP、FTP和TFTP等这些协议都是属于互联网协议网络层模型中的应用层协议。它们的底层实现主要依赖于传输层的两种协议—— TCP(传输控制协议) 和 UDP(用户数据报协议)。 HTTP: 超文本传输协议(HTTP)通常在TCP协议的基础上操作。HTTP用于在网络上传输超文本&#xff0c;是万维网…

【MySQL】游标和触发器

一、游标 1.1 什么是游标 1、使用背景 在我们使用update或者delete操作数据时&#xff0c;一般都会根据条件语句查询出很多条记录组成的数据集&#xff0c;然后一次性批量操作 假设我们想要对这个结果集中的数据 一行一行的进行操作&#xff0c;比如某个条件满足后&#xff…

一开始我只是接单试试水而已,后来我居然财富自由了!

一开始我只是抱着试一试的心态&#xff0c;浅浅的尝试了一下网上接单&#xff0c;没办法&#xff0c;这风太大了&#xff01;网上个个儿说的神乎其神的&#xff0c;尤其是动不动就几十W&#xff0c;没办法&#xff0c;我眼红啦&#xff01;赚钱嘛&#xff0c;不丢人&#xff01…

设计模式总结-建造者模式

建造者模式 模式动机模式定义模式结构模式分析建造者模式实例与解析实例&#xff1a;KFC套餐 模式动机 无论是在现实世界中还是在软件系统中&#xff0c;都存在一些复杂的对象&#xff0c;它们拥有多个组成部分&#xff0c;如汽车&#xff0c;它包括车轮、方向盘、发送机等各种…

7-3 值班安排 (python实现) 【函数嵌入】【遍历已修改字典】【字典按值对键排序】

题目 医院有A、B、C、D、E、F、G 7位大夫&#xff0c;在一星期内&#xff08;星期一至星期天&#xff09;每人要轮流值班一天&#xff0c;如果已知&#xff1a; &#xff08;1&#xff09;A大夫比C大夫晚1天值班&#xff1b; &#xff08;2&#xff09;D大夫比E大夫晚1天值班&…

手机软件何时统一--桥接模式

1.1 凭什么你的游戏我不能玩 2007年苹果手机尚未出世&#xff0c;机操作系统多种多样&#xff08;黑莓、塞班、Tizen等&#xff09;&#xff0c;互相封闭。而如今&#xff0c;存世的手机操作系统只剩下苹果OS和安卓&#xff0c;鸿蒙正在稳步进场。 1.2 紧耦合的程序演化 手机…

gma 教程:计算标准化降水指数(SPI)

安装 gma&#xff1a;pip install gma &#xff08;依赖的 gdal 需自行安装&#xff09; 本文基于&#xff1a;gma 2.0.8&#xff0c;Python 3.10 本文用到数据请从 gma 网站获取&#xff1a;https://gma.luosgeo.com/UserGuide/climet/Index/SPI.html 。 SPEI 函数简介 gma.c…

Spring 中类似 aBbb 单字母单词序列化与反序列问题

文章目录 前言代码准备问题排查lombok自定义生成 get、set 结合源码解析使用 lombok使用 lombok 自定义生成 user 对象 get、set 方法 如何解决使用注解 JsonProperty("aTest")自定义实现符合 Spring 规范的 get set 方法 个人简介 前言 最近在使用 spring boot mvc…

SpringBoot整合RabbitMQ------------->直连交换!!!

一、创建一个springboot项目 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency> 二、配置RabbitMQ连接 1、在application.properties或application.…

蓝桥杯 - 九宫幻方

解题思路&#xff1a; 枚举法 import java.util.Scanner;//枚举法&#xff0c;采用枚举的方式存储不同的九宫格排列 public class Main {// 定义九个不同的九宫格排列public static int[][] exp {{ 4, 9, 2, 3, 5, 7, 8, 1, 6 },{ 8, 3, 4, 1, 5, 9, 6, 7, 2 },{ 6, 1, 8, 7…

五分钟快速搭建五金行业小程序商城教程解析

作为五金行业的从业者&#xff0c;你可能想要拓展线上业务&#xff0c;提供更方便快捷的购物体验给顾客。而小程序商城成为了一种非常受欢迎的方式。但是&#xff0c;你可能觉得不懂代码无法实现这样的小程序商城。现在&#xff0c;我将通过以下步骤&#xff0c;教你如何在五分…