[Java基础揉碎]泛型

news2025/1/12 3:58:55

目录

泛型的理解和好处

使用传统方法的问题分析

使用泛型

 泛型介绍

泛型的语法

泛型的声明

泛型的注意事项和细节

自定义泛型类

​编辑

自定义泛型接口

自定义泛型方法

泛型的继承和通配符


 

泛型的理解和好处

看一个需求

1)请编写程序,在ArrayList 中,添加3个Dog对象

2) Dog对象含有name 和 age,并输出name 和 age (要求使用getXxx())

先使用传统的方法来解决 ->引出泛型

// 传统方式实现

// 但是有一个问题,  如果程序员不小心加了一直猫进去, 那么就可能发生向下转型异常, 这一个隐患, 但是编译器发现不了的

使用传统方法的问题分析

1)不能对加入到集合ArrayList中的数据类型进行约束(不安全)

2)遍历的时候,需要进行类型转换,如果集合中的数据量较大,对效率有影响 

使用泛型

可以看到加入泛型后, 再添加猫就报错了

同时在遍历的时候, 可以直接取出Dog类型而不是Object类 , 省去了向下转型, 提高了效率

 

 泛型介绍

泛(广泛)型(类型)=> Integer, String, Dog

1)泛型又称参数化类型,是Jdk5.0 出现的新特性,解决数据类型的安全性问题

2)在类声明或实例化时只要指定好需要的具体的类型即可

3)Java泛型可以保证如果程序在编译时没有发出警告,运行时就不会产生 ClassCastException异常。同时,代码更加简洁、健壮

4)泛型的作用是:可以在类声明时通过一个标识表示类中某个属性的类型,或者是某个方法的返回值的类型,或者是参数类型。

 

泛型的语法

泛型的声明

interface 接口<T>{} 和 class类<K,V>{}

1)其中,T,K,V不代表值,而是表示类型。

2)任意字母都可以。常用T表示,是Type的缩写

       ○泛型的实例化: 要在类名后面指定类型参数的值(类型)。

        如:

        1) List<String> strList = new ArrayList<String>();[举例说明]

        2) lterator<Customer> iterator = customers.iterator(); 

泛型的注意事项和细节

1. 给泛型指定的数据类型是, 要求是引用类型, 而不是基本数据类型

2. 给泛型指定具体类型后, 可以传入该类型或者其子类类型 

3. 泛型的使用形式, 在实际开发中, 往往简写, 省略后面尖括号的泛型 

 4. 不指定泛型时, 默认是Object类型

 

自定义泛型类

注意细节

1)普通成员可以使用泛型(属性、方法)

2) 使用泛型的数组,不能初始化, 因为数组在new 不能确定T的类型,就无法在内存开空间

3)静态方法中不能使用类的泛型, 因为静态是和类相关的,在类加载时,对象还没有创建 , 所以,如果静态方法和静态属性使用了泛型,JVM就无法完成初始化

4)泛型类的类型,是在创建对象时确定的(因为创建对象时,需要指定确定类型)

5) 如果在创建对象时,没有指定类型,默认为Object

自定义泛型接口

注意细节

1) 接口中,静态成员也不能使用泛型(这个和泛型类规定一样)

2) 泛型接口的类型, 在继承接口或者实现接口时确定

3) 没有指定类型,默认为Object 

自定义泛型方法

注意细节

1.泛型方法,可以定义在普通类中, 也可以定义在泛型类中

2.当泛型方法被调用时,类型会确定

3. public void eat(E e){},修饰符后没有<T,R..> eat 方法不是泛型方法,而是使用了泛型 

自定义泛型方法练习题

--实例 

 

泛型的继承和通配符

1)泛型不具备继承性

        List<Object> list = new ArrayList<String>();//对吗?

2)<?>: 支持任意泛型类型

3)<? extends A>: 支持A类以及A类的子类,规定了泛型的上限

4) <? super A>: 支持A类以及A类的父类,不限于直接父类,规定了泛型的下限

--实例

      编写了三个类

         <?>: 支持任意泛型类型

         <? extends A>: 支持A类以及A类的子类,规定了泛型的上限

        <? super A>: 支持A类以及A类的父类,不限于直接父类,规定了泛型的下限

 

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

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

相关文章

在IDEA中解决SSM项目修改图片不能回显问题

1.问题描述 图片成功上传之后&#xff0c;件夹中已经显示图片了&#xff0c;但是访问图片资源会出现404错误&#xff0c;再重新启动服务器之后&#xff0c;发现这个错误又消失了&#xff0c;图片又能正常显示&#xff0c;但是必须重启Tomcat才有效。 2.解决方法如下&#xff…

一台服务器同时启动两个版本jdk

之前Java项目都是1.8的jdk&#xff0c;在服务器部署正常使用&#xff0c;服务器配置环境变量jdk1.8版本。最近一次我用了jdk17版本&#xff0c;部署服务器后&#xff0c;遇见了jdk版本不一致报错 报错内容&#xff1a; 52指向jdk1.8,61指向jdk17&#xff0c;大概就是jdk版本不…

护眼台灯什么牌子好一点?专业做护眼灯的有哪些品牌?一文见分晓

护眼台灯什么牌子好一点&#xff1f;随着市场对护眼台灯需求的增加&#xff0c;一些质量低劣的产品也相继曝光&#xff0c;这让消费者们的担忧变得合情合理。选择一款合适的护眼台灯&#xff0c;不仅能够缓解眼睛疲劳&#xff0c;还能提升学习与工作的效率。那么现如今专业做护…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 4月20日,星期六

每天一分钟&#xff0c;知晓天下事&#xff01; 2024年4月20日 星期六 农历三月十二 1、 证监会&#xff1a;调降基金股票交易佣金费率&#xff0c;年度降幅测算将达38%&#xff0c;7月1日起实施。 2、 民政部举办全国“乡村著名行动”培训班&#xff0c;助力乡村振兴。 3、…

顺序表的应用—多指针算法

题目一 对于上面的题&#xff0c;有以下的两种思路 思路一&#xff1a; 定义一个顺序表&#xff0c;然后遍历数组&#xff0c;如果数组里面的元素等于val的值&#xff0c;就让这个值等于0就行了&#xff0c;然后输出的时候输出不是0的就行了 代码实现1 #include<stdio.h…

vscode如何方便地添加todo和管理todo

如果想在vscode中更加方便的添加和管理TODO标签&#xff0c;比如添加高亮提醒和查看哪里有TODO标签等&#xff0c;就可以通过安装插件快速实现。 安装插件 VSCode关于TODO使用人数最多的插件是TODO Height和Todo Tree 按住 CtrlShiftX按键进入应用扩展商店&#xff0c;输入to…

数据分析案例-中国黄金股票市场的EDA与价格预测

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

conda新建环境报错An HTTP error occurred when trying to retrieve this URL.

conda新建环境报错如下 cat .condarc #将 .condarc文件中的内容删除&#xff0c;改成下面的内容 vi .condarc channels:- defaults show_channel_urls: true default_channels:- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main- https://mirrors.tuna.tsinghua.…

pdf如何盖电子骑缝章?

在PDF文档中盖电子骑缝章&#xff0c;通常涉及到以下几个步骤&#xff1a; 1. 准备骑缝章图像 创建或获取骑缝章图片&#xff1a;设计或扫描实体骑缝章&#xff0c;将其转化为清晰的电子图像&#xff0c;通常为PNG或JPEG格式&#xff0c;确保背景透明&#xff0c;以便叠加在P…

学习Django

1.python安装是会有几个主要目录&#xff1a; 2.如果某个路径加入了环境变量&#xff0c;那么在命令行直接输入他下面的文件就能找到&#xff0c;不用输入完整路径 2.过程 &#xff08;1&#xff09;安装

零代码编程:用kimichat将mp4视频批量转为mp3音频

一个文件夹里面有多个子文件夹&#xff0c;里面的视频需要转成为mp3音频格式。可以在kimichat中键入提示词&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个Python脚本的编写任务&#xff0c;具体步骤如下&#xff1a; 打开文件夹&#xff1a;D:\CHATGPT For TikT…

Windows下使用CMake生成并使用动态库

生成动态库 // example.h#pragma once#include <iostream>#ifdef EXAMPLE_EXPORTS #define EXAMPLE_API __declspec(dllexport) #else #define EXAMPLE_API __declspec(dllimport) #endifclass EXAMPLE_API MyClass { public:MyClass();~MyClass();void memberFunction(…

Pytorch手撸Attention

Pytorch手撸Attention 注释写的很详细了&#xff0c;对照着公式比较下更好理解&#xff0c;可以参考一下知乎的文章 注意力机制 import torch import torch.nn as nn import torch.nn.functional as Fclass SelfAttention(nn.Module):def __init__(self, embed_size):super(S…

Kafka安装Windows版

系列文章目录 文章目录 系列文章目录前言前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 Kafka 是一个由 LinkedIn 开发的分布式消息系统,它于2011年年初开源,现…

java byte数组转String

hi&#xff0c;我是程序员王也&#xff0c;一个资深Java开发工程师&#xff0c;平时十分热衷于技术副业变现和各种搞钱项目的程序员~&#xff0c;如果你也是&#xff0c;可以一起交流交流。 今天我们聊聊Java中Byte数组转String的用法~ 转换方法概览 在Java中&#xff0c;将b…

【人工智能】机器学习算法综述及常见算法详解

目录 推荐 1、机器学习算法简介 1.1 机器学习算法包含的两个步骤 1.2 机器学习算法的分类 2、线性回归算法 2.1 线性回归的假设是什么&#xff1f; 2.2 如何确定线性回归模型的拟合优度&#xff1f; 2.3 如何处理线性回归中的异常值&#xff1f; 3、逻辑回归算法 3.1 …

蓝桥杯2024年第十五届省赛

E:宝石组合 根据给的公式化简后变为gcd(a,b,c)根据算数基本定理&#xff0c;推一下就可以了 然后我们对1到mx的树求约数&#xff0c;并记录约数的次数&#xff0c;我们选择一个最大的且次数大于等3的就是gcd int mx; vector<int> g[N]; vector<int> cnt[N]; int…

深入刨析 mysql 底层索引结构B+树

文章目录 前言一、什么是索引&#xff1f;二、不同索引结构对比2.1 二叉树2.2 平衡二叉树2.3 B-树2.4 B树 三、mysql 的索引3.1 聚簇索引3.2 非聚簇索引 前言 很多人看过mysql索引的介绍&#xff1a;hash表、B-树、B树、聚簇索引、主键索引、唯一索引、辅助索引、二级索引、联…

【面经】2024春招-云计算后台研发工程师2(三大行 TW等)

【面经】2024春招-云计算后台研发工程师2&#xff08;三大行 & TW等&#xff09; 文章目录 岗位与面经基础1&#xff1a;数据库 & 网络基础2&#xff1a;系统 & 网络编程模板3&#xff1a;算法 & 行测 岗位与面经 1、银行面经&#xff08;重点&#xff09; …

MinIO自定义权限控制浅研

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 MinIO搭建好之后&#xff0c;出于不同场景的需要&#xff0c;有时候需要对不同的用户和Bucket做一些针对性的权限控制。 MinIO的…