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() {//返回类型使用E
        return 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)
        }
    }
}

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

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

相关文章

go的编译以及运行时环境

开篇 很多语言都有自己的运行时环境&#xff0c;go自然也不例外&#xff0c;那么今天我们就来讲讲go语言的运行时环境&#xff01; 不同语言的运行时环境对比 我们都知道Java的运行时环境是jvm &#xff0c;javascript的运行时环境是浏览器内核 Java -->jvm javascript…

进阶C语言-文件操作

文件操作 &#x1f388;1.为什么使用文件&#x1f388;2.什么是文件&#x1f52d;2.1程序文件&#x1f52d;2.2数据文件&#x1f52d;2.3文件名 &#x1f388;3.文件的打开和关闭&#x1f52d;3.1文件指针&#x1f52d;3.2文件的打开和关闭 &#x1f388;1.为什么使用文件 ✅ 我…

【从浅学到熟知Linux】进程间通信之匿名管道方式(进程间通信方式汇总、匿名管道的创建、匿名管道实现进程池详解)

&#x1f3e0;关于专栏&#xff1a;Linux的浅学到熟知专栏用于记录Linux系统编程、网络编程等内容。 &#x1f3af;每天努力一点点&#xff0c;技术变化看得见 文章目录 进程间通信介绍如何实现进程间通信进程间通信分类 管道通信方式什么是管道匿名管道pipe匿名管道读写规则管…

ros Moveit学习记录(一) MoveIt Setup Assistant

ros MoveIt Setup Assistant 记录 1. 准备工作2. 使用记录a. 打开Moveit! Setup Assistantb. *Create New Moveit Configuration* -> 填入urdf.xacro的地址c. Self-Collisions&#xff1a;全选了即可d. Define Virtual Jointse. Define Planning Groupsf. Define Robot Pose…

腾讯云服务器价格明细表2024年最新(CPU内存/带宽/磁盘)

腾讯云服务器价格明细表2024年最新&#xff08;CPU内存/带宽/磁盘&#xff09;腾讯云服务器租用优惠价格表&#xff1a;轻量应用服务器2核2G3M价格61元一年&#xff0c;2核2G4M价格99元一年、135元15个月、540元三年&#xff0c;2核4G5M带宽165元一年、252元15个月、756元3年&a…

@NameBinding注解名称绑定过滤器/拦截器

NameBinding注解名称绑定过滤器/拦截器&#xff0c;只针对某一些资源方法执行处理逻辑 一、为什么要用名称绑定 一般情况下&#xff0c;借助Spring的过滤器或者拦截器等对Http请求或响应进行处理就能满足需求。但是在有些场景下若只需对特定的xxxResource做拦截处理&#xff0…

vivado 自定义波形配置

自定义配置 您可使用下表中列示并简述的功能来自定义波形配置 &#xff1b; 其中功能名称链接至提供功能完整描述的相应小节。 光标 光标主要用作为样本位置的临时指示符并且会频繁移动 &#xff0c; 比如测量 2 个波形边沿之间的距离 &#xff08; 以样本数为单位 &#x…

Colab使用教程(超级详细版)及Colab Pro/Pro+评测

原文&#xff1a;Colab使用教程&#xff08;超级详细版&#xff09;及Colab Pro/Pro评测 - 知乎 在下半年选修了机器学习的关键课程Machine learning and deep learning&#xff0c;但由于Macbook Pro显卡不支持cuda&#xff0c;因此无法使用GPU来训练网络。教授推荐使用Google…

超越OpenAI,谷歌重磅发布从大模型蒸馏的编码器Gecko

引言&#xff1a;介绍文本嵌入模型的重要性和挑战 文本嵌入模型在自然语言处理&#xff08;NLP&#xff09;领域扮演着至关重要的角色。它们将文本转换为密集的向量表示&#xff0c;使得语义相似的文本在嵌入空间中彼此靠近。这些嵌入被广泛应用于各种下游任务&#xff0c;包括…

QT C++(信号与槽函数,自定义信号和槽函数)

文章目录 1. QT信号与槽函数2. QT自定义信号和槽函数 1. QT信号与槽函数 QT信号关键要素&#xff1a; 信号源&#xff1a;那个控件发送的信号信号类型&#xff1a;用户进行不同的操作&#xff0c;就可能触发不同的信号。 eg&#xff1a;点击按钮&#xff0c;移动鼠标等信号处…

学习ArkTS -- 状态管理

装饰器 State 在声明式UI中&#xff0c;是以状态驱动试图更新&#xff1a; 状态&#xff08;State&#xff09;&#xff1a;指驱动视图更新的数据&#xff08;被装饰器标记的变量&#xff09; 视图&#xff08;View&#xff09;&#xff1a;基于UI描述渲染得到用户界面 说明…

汕头联想 ibm x3500 M5服务器上门维修记录

汕头联想服务器现场检修&#xff1b;汕尾IBM服务器故障维修&#xff1b;揭阳戴尔服务器维修&#xff1b;汕头ERP服务器维修&#xff1b;潮阳地区各种服务器故障维修&#xff1b;各类服务器主板齐全&#xff1b; 分享一例从东莞到汕头某染料厂维修ibm system x3500 M5服务器的真…

LocalAi,Ollama+AnythingLLM搭建部署本地大模型AI知识库,汉化版本

AnythingLLM 是一个全栈应用程序&#xff0c;您可以使用商业现成的 LLM 或流行的开源 LLM 和 vectorDB 解决方案来构建私有 ChatGPT&#xff0c;无需任何妥协&#xff0c;您可以在本地运行&#xff0c;也可以远程托管并能够智能聊天以及您提供的任何文件。 AnythingLLM 将您的文…

UI5:面向企业级应用的JavaScript框架

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

vue的学习之用vue写一个hello,vue

根据以下步骤下载vue.js 介绍 — Vue.js 创建一个damo.html &#xff0c;引入vue.js即可 <body><div id"app">{{ message }}</div><!-- Vue --><!-- 开发环境版本&#xff0c;包含了有帮助的命令行警告 --><script src"js/vu…

苹果电脑装虚拟机好用吗 苹果电脑装虚拟机要钱吗 Parallels对mac的损害 Parallels占用多大空间 PD19

在当今数字化的时代&#xff0c;人们对电脑系统跨设备互联的需求越来越高。作为拥有广泛用户群体的苹果电脑&#xff0c;许多用户会有在Mac系统中运行其他操作系统的需求。在这种情况下&#xff0c;安装虚拟机是一个较好的解决方案。那么接下来就给大家介绍苹果电脑装虚拟机好用…

{“errMsg“:“insertXWebCamera:fail appid privacy api banned“}

问题描述&#xff1a;微信小程序&#xff0c;在体验版本测试时&#xff0c;调用摄像头OK&#xff0c;没有任何问题&#xff0c;部署发布版本后&#xff0c;日志报错内容&#xff1a;{"errMsg":"insertXWebCamera:fail appid privacy api banned"}&#xff…

企业公众号数量怎么申请

一般可以申请多少个公众号&#xff1f;许多用户在申请公众号时可能会遇到“公众号显示主体已达上限”的问题。这是因为在2018年11月16日对公众号申请数量进行了调整&#xff0c;具体调整如下&#xff1a;1、个人主体申请公众号数量上限从2个调整为1个。2、企业主体申请公众号数…

那些早期的iax和SIP软电话软件界面,看看你见过几个?

目录 一些iax/sip软电话UI图片SIP软电话的界面怎么设计SIP软电话的功能有哪些 早期voip发展中&#xff0c;很多公司开发了自己的SIP软电话&#xff0c;有些已经不存在了&#xff0c;有些还在使用中&#xff0c;比如X-Lite&#xff0c;Zoiper等等&#xff0c;我们一起看看这些早…

【软考经验分享】软考-中级-嵌入式备考

这里写目录标题 教辅用书嵌入式系统设计师考试大纲嵌入式系统设计师教程嵌入式系统设计师5天修炼嵌入式系统设计师考前冲刺100题 刷题软件希赛网软考真题 视频教程希赛网王道-计组计网 教辅用书 嵌入式系统设计师考试大纲 50页左右&#xff0c;内容为罗列一些考点&#xff0c…