Java学习笔记29(泛型)

1.泛型

ArrayList<Dog> arrayList = new ArrayList<Dog>();
//1.当我们ArrayList<Dog>表示存放到ArrayList集合中的元素是Dog类
//2.如果编译器发现添加的类型,不满足要求,就会报错
//3.在便利的时候,可以直接取出Dog类型而不是Object
arrayList.add(new Dog("旺财",10));
arrayList.add(new Dog("小法",1));for(Dog dog : arrayList) {System.out.println(dog.name +" " + dog.age);
}

*泛型的好处

1.编译时,检查添加元素的类型,提高了安全性

2.减少了类型转换的次数,提高了效率

在这里插入图片描述

1.泛型介绍

​ *泛型(广泛的类型) --> Integer,String,Dog

​ public class ArrayList{} //E成为泛型

1.泛型又称参数化类型,解决数据类型的安全性问题

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

3.Java泛型可以保证如果程序在编译时没有发出警告,运行时就不会产生ClassCastException异常

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

class Person<E> {E s;//E表示s的数据类型,该数据类型在定义Person对象的时候指定,即在编译期间,就确定E是什么类型public Person(E s) {//E也可以是参数类型this.s = s;}public E f() {//返回类型使用Ereturn s;}
}

2.泛型的声明

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

​ *说明

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

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

​ *泛型的实例化:

1.List strList = new ArrayList();

2.Iterator iterator = customers.iterator();

//使用泛型方式给HashMap放入学生对象
HashMap<String, Student> hm = new HashMap<String, Student>();
hm.put("tom", new Student("tom",28));Set<Map.Entry<String, Student>> entries = hm.entrySet();
Iterator<Map.Entry<String,Student>> iterator = entries.iterator();

3.泛型注意细节

1.<>内只能放引用类型Integer之类的,不能是int之类的基本数据类型

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

class A{}
class B extends A{}class Pig<E> {E e;public Pig(E e) {this.e = e;}
}main()
{Pig<A> aPig = new Pig<A>(new A());Pig<A> aPig2 = new Pig<A>(new B());
}

3.如果没有指定泛型,默认是Object

ArrayList arrayList = new ArrayList();//等价 ArrayList<Object> arrayList = new ArrayList();

4.自定义泛型

​ *基本语法

class 类名<TR...> {//...表示可以有多个泛型成员
}

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

2.使用泛型的数组,不能初始化

3.静态方法中不能使用类的泛型

4.泛型类的类型,是在创建对象时确定的

5.未指定泛型,默认为Object

//1.Tiger后面有泛型,所有把Tiger成为自定义泛型类
//2.T、R、M泛型的标识符,一般是单个大写字母
//3.泛型标识符可以有多个
//4.普通成员可以使用泛型(属性、方法)
class Tiger<TRM> {String name;R r;M m;T t;
}

5.自定义泛型接口

​ *基本语法

interface 接口名<T,R...> {}

1.接口中,静态成员也不能使用泛型

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

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

interface IUsb<U,R> {}//继承接口时,直接指定泛型接口的类型
interface IA extends IUsb<String,Double> {	//String指定给U,Double指定给R}//实现接口时,直接指定泛型接口的类型
class BB implements IUsb<Integer,Float> {}

6.自定义泛型方法

​ *基本语法

修饰符 <T,R...> 返回类型 方法名(参数列表) {}

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

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

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

class Car {//普通类public <T,R> void fly(T t,R r) {//泛型方法}
}class Fish<T,R> {//泛型类public <U,M> void eat(U u,M m) {//泛型方法}
}main()
{Car car = new Car();car.fly("宝马",100);//当调用方法时,传入参数,编译器就会确定类型
}

7.泛型的继承和通配符

1.泛型不具备继承性

List<Object> list = new ArrayList<String>();//不可以这样

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

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

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

main()
{//List<?> 表示任意的泛型类型都可以接受public static void printCollection1(List<?> c) {for(Object object :c) {System.out.println(object)}}public static void printCollection1(List<? extends AA> c) {for(Object object :c) {System.out.println(object)}}public static void printCollection1(List<? super AA> c) {for(Object object :c) {System.out.println(object)}}
}

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

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

相关文章

论文笔记:Does Writing with Language Models Reduce Content Diversity?

iclr 2024 reviewer评分 566 1 intro 大模型正在迅速改变人们创造内容的方式 虽然基于LLM的写作助手有可能提高写作质量并增加作者的生产力&#xff0c;但它们也引入了算法单一文化——>论文旨在评估与LLM一起写作是否无意中降低了内容的多样性论文设计了一个控制实验&…

空间数据索引的利器:R-Tree原理与实现深度解析

空间数据索引的利器&#xff1a;R-Tree原理与实现深度解析 R-Tree的原理插入操作分裂操作查询操作 R-Tree的伪代码R-Tree的C语言实现讨论结论 R-Tree是一种平衡树&#xff0c;用于空间数据索引&#xff0c;特别是在二维或更高维度的几何对象存储和检索中。它由Antony Guttman和…

关系抽取与属性补全

文章目录 实体关系抽取的任务定义机器学习框架属性补全 实体关系抽取的任务定义 从文本中抽取出两个或者多个实体之间的语义关系&#xff1b;从文本获取知识图谱三元组的主要技术手段&#xff0c;通常被用于知识图谱的补全。美丽的西湖坐落于浙江省的省会城市杭州的西南面。&am…

(C语言入门)数组

目录 什么是数组&#xff1f; 数组&#xff1a; 数组的使用&#xff1a; 数组的初始化&#xff1a; 数组名&#xff1a; 数组案例&#xff1a; 一维数组的最大值&#xff1a; 一维数组的逆置&#xff1a; 数组和指针&#xff1a; 通过指针操作数组元素&#xff1a; …

亚马逊、Lazada、速卖通怎么提高复购率?如何利用自养号测评实现销量飙升

对于跨境卖家来说&#xff0c;抓住客户是最重要的&#xff0c;很多卖家都把大部分心思放在如何吸引新客户上&#xff0c;忽视了已有客户的维护。其实相较于投广告、报秒杀活动吸引新客户&#xff0c;维护好已有客户&#xff0c;提升复购率的成本更低。当然&#xff0c;维护好客…

使用matlab/C语言/verilog分别生成coe文件

之前已经写过一个如何使用matlab生成coe文件&#xff0c;matlab自行运算生成三角波、正弦波等数据&#xff0c;并保存为COE文件。可跳转下面的网址进行查阅。 使用matlab生成正弦波、三角波、方波的COE文件_三角波文件.coe-CSDN博客https://blog.csdn.net/yindq1220/article/d…

C++ | Leetcode C++题解之第32题最长有效括号

题目&#xff1a; 题解&#xff1a; class Solution { public:int longestValidParentheses(string s) {int left 0, right 0, maxlength 0;for (int i 0; i < s.length(); i) {if (s[i] () {left;} else {right;}if (left right) {maxlength max(maxlength, 2 * ri…

Python从0到100(十五):函数的高级应用

前言&#xff1a; 零基础学Python&#xff1a;Python从0到100最新最全教程。 想做这件事情很久了&#xff0c;这次我更新了自己所写过的所有博客&#xff0c;汇集成了Python从0到100&#xff0c;共一百节课&#xff0c;帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

高通将支持 Meta Llama 3 在骁龙终端运行;特斯拉中国全系车型降价 1.4 万元丨 RTE 开发者日报 Vol.189

开发者朋友们大家好&#xff1a; 这里是「RTE 开发者日报」&#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE&#xff08;Real Time Engagement&#xff09; 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有…

第52篇:算法的硬件实现<三>

Q&#xff1a;本期我们介绍二进制搜索算法电路&#xff0c;用于查找某个数据在数组中的位置。 A&#xff1a;基本原理&#xff1a;从数组的中间元素开始&#xff0c;如果给定值和中间元素的关键字相等&#xff0c;则查找成功&#xff1b;如果给定值大于或者小于中间元素的关键…

Java本地缓存技术选型(Guava Cache、Caffeine、EhCache)

前言 对一个java开发者而言&#xff0c;提到缓存&#xff0c;第一反应就是Redis。利用这类缓存足以解决大多数的性能问题了&#xff0c;我们也要知道&#xff0c;这种属于remote cache&#xff08;分布式缓存&#xff09;&#xff0c;应用的进程和缓存的进程通常分布在不同的服…

JAVA学习笔记30(线程)

1.线程 1.线程的概念 1.线程是由进程创建的&#xff0c;是进程的一个实体 2.一个进程可以拥有多个线程 2.并发 ​ *同一时刻&#xff0c;多个任务交替执行&#xff0c;造成一种"貌似同时"的错觉&#xff0c;单核cpu实现的多任务就是并发 3.并行 ​ *同一时刻&…

私人密码管理储存库!Bitwarden 部署安装教程

日常生活中我们每个人都会拥有大量网站或社交平台帐号&#xff0c;时间久远了密码很容易忘记。因此&#xff0c;像 1Password 等密码管理 同步 一键登录的工具成为了很多人的首选。 然而 1Password 毕竟要付费&#xff0c;也有人会担心这类工具有隐私泄露的风险。其实&#…

随着深度学习的兴起,浅层机器学习没有用武之地了吗?

深度学习的兴起确实在许多领域取得了显著的成功&#xff0c;尤其是那些涉及大量数据和复杂模式的识别任务&#xff0c;如图像识别、语音识别和自然语言处理等。然而&#xff0c;这并不意味着浅层机器学习&#xff08;如支持向量机、决策树、朴素贝叶斯等&#xff09;已经失去了…

Android集成Sentry实践

需求&#xff1a;之前使用的是tencent的bugly做为崩溃和异常监控&#xff0c;好像是要开始收费了&#xff0c;计划使用开源免费的sentry进行替换。 步骤&#xff1a; 1.修改工程文件 app/build.gradle apply plugin: io.sentry.android.gradle sentry {// 禁用或启用ProGua…

算法打卡day50|单调栈篇01| Leetcode 739. 每日温度、496.下一个更大元素 I

算法题 Leetcode 739. 每日温度 题目链接:739. 每日温度 大佬视频讲解&#xff1a;739. 每日温度视频讲解 个人思路 因为题目所求的是找到一个元素右边第一个比自己大的元素&#xff0c;这是单调栈的经典题目&#xff0c;用栈来记录遍历过的元素 解法 单调栈 单调栈的本质…

opensshserver.config: line 3: Bad configuration option: GSSAPIKexAlgorithms

报错记录 /etc/crypto-policies/back-ends/opensshserver.config: line 3: Bad configuration option: GSSAPIKexAlgorithms 百度尝试 找到 “GSSAPIKexAlgorithms”这一行&#xff0c;然后注释掉 #GSSAPIKexAlgorithms vim /etc/ssh/sshd_config 这种方式并没有解决 解决方…

为什么中级职称评审不通过?有什么原因?

参与过职称评审或者有了解过职称评审的小伙伴们&#xff0c;应该都知道&#xff0c;职称评审都是有通过率&#xff0c;不是你去评&#xff0c;一定会评下来&#xff0c;一定会发证的&#xff0c;那么评审为什么不通过&#xff1f;有哪些原因呢&#xff1f; 现在职称评审人越来越…

免费开源圈子社交交友社区系统 可打包小程序 支持二开 源码交付!

线上社交的好处&#xff1a; 当今社会&#xff0c;人们越来越依赖于网络社交。互联网无疑为人类带来了许多好处&#xff0c; 其中一个就是线上社交。通过各种社交平台&#xff0c;人们可以随时随地互动交流&#xff0c;扩大自 己的社交圈&#xff0c;丰富生活。但是&#xf…

智慧气象站:赋能农业高标准发展新征程

随着科技的不断进步&#xff0c;智慧农业气象站已成为推动农业高标准发展的重要力量。它集成了先进的传感器、数据分析和通信技术&#xff0c;为农业生产提供了精准、及时的气象信息&#xff0c;助力农民实现科学种植、精准管理。 智慧农业气象站能够实时监测农田环境的温度、…