java基础巩固,中级篇(泛型)

本博客总结了Java泛型相关知识。泛型是不确定的数据类型,使用它可省略强转代码、提前发现编译问题。同时介绍了泛型不能用基本类型、不允许静态化和参数重载等限制,还阐述了泛型的好处、通配符、使用方式(类、接口、方法)及数组使用情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本博客总结网络其他文章和自己的理解,仅用于自己巩固基础跟分享给大家参考而已

1.Java泛型简介

 泛型:就是一种不确定的数据类型。
 比如:ArrayList<E> E就是泛型。 这种不确定的数据类型需要在使用这个类的时候才能够确定出来。
 泛型可以省略,如果省略,默认泛型是Object类型。
泛型的好处:
  1. 省略了强转的代码。
  2. 可以把运行时的问题提前到编译时期。
 

2.Java泛型不能使用基本类型

java的基本类型:boolean,char,float,double,byte,int,short,long。 
使用基本类型的泛型会编译报错,代码如下:

List<int> list = new List<int>();// 编译前类型检查报错

因为泛型在编译时,会进行类型擦除,最后只保留原始类型。而原始类型只能是Object类及其子类,当然不能使用基本数据类型。

3.Java泛型不允许进行静态化

原因:静态变量在类中共享,而泛型类型是不确定的,因此编译器无法确定要使用的类型,所以不允许进行静态化。

4.Java泛型不允许作为参数进行重载

因为类型擦除之后,两个方法是一样的参数列表,这种情况无法重载。

5.使用泛型的好处

使用泛型的好处:
泛型的用法是在容器后面添加<Type>
Type可以是类,抽象类,接口
泛型表示这种容器,只能存放该类类型,其他类型就放不进去了

6.子类对象是否可以放

子类对象是可以的被放入的

假设容器的泛型是A,那么A的子类B,C都可以放进去

和A无关的类型D还是放不进去

7.泛型的简写

为了不使编译器出现警告,需要前后都使用泛型,像这样:

ArrayList<A> a= new ArrayList<A>();

不过JDK7提供了一个可以略微减少代码量的泛型简写方式:

ArrayList<A> aa= new ArrayList<>();

后面的泛型可以用<>来代替

8.泛型通配符

泛型的通配符有以下三种

1.  ? extends

2.  ? super

3.?

打个比喻 B,C是A的子类泛型

ArrayList  lsit<? extends A> 表示这是一个A泛型或者其子类泛型
lsit的泛型可能是A
lsit的泛型可能是B
lsit的泛型可能是C
所以 可以确凿的是,从list取出来的对象,一定是可以转型成A的
但是,不能往里面放东西

ArrayList list<? super A> 表示这是一个A泛型或者其父类泛型
list的泛型可能是A
list的泛型可能是Object
可以往里面插入A以及A的子类(B,C)
但是取出来有风险,因为不确定取出来是A还是Object

泛型通配符? 代表任意泛型
既然?代表任意泛型,那么换句话说,这个容器什么泛型都有可能
所以只能以Object的形式取出来
并且不能往里面放对象,因为不知道到底是一个什么泛型的容器

9.泛型特性

泛型只在编译阶段有效

10.泛型的使用

泛型有三种使用方式,分别为:泛型类、泛型接口、泛型方法

泛型类

泛型类型用于类的定义中,被称为泛型类。通过泛型可以完成对一组类的操作对外开放相同的接口。最典型的就是各种容器类,如:List、Set、Map。

泛型的类型参数只能是类类型,不能是简单类型。

不能对确切的泛型类型使用instanceof操作。

泛型接口

泛型接口与泛型类的定义及使用基本相同。泛型接口常被用在各种类的生产器中。

泛型方法

在java中,泛型类的定义非常简单,但是泛型方法就比较复杂了

泛型类,是在实例化类的时候指明泛型的具体类型;泛型方法,是在调用方法的时候指明泛型的具体类型 。

静态方法有一种情况需要注意一下,那就是在类中的静态方法使用泛型:静态方法无法访问类上定义的泛型;如果静态方法操作

的引用数据类型不确定的时候,必须要将泛型定义在方法上。

11.泛型数组

在java中是”不能创建一个确切的泛型类型的数组”的。

也就是说下面的这个例子是不可以的

List<String>[] ls = new ArrayList<String>[10];  

而使用通配符创建泛型数组是可以的,如下面这个例子:

List<?>[] ls = new ArrayList<?>[10]; 

这样也是可以的:

List<String>[] ls = new ArrayList[10];

 

基于开源大模的教学实训智能体软件,帮助教师生成课前备课设计、课后检测问答,提升效率与效果,提供学生全时在线练习与指导,实现教学相长。 智能教学辅助系统 这是一个智能教学辅助系统的前端项目,基于 Vue3+TypeScript 开发,使用 Ant Design Vue 作为 UI 组件库。 功能模块 用户模块 登录/注册功能,支持学生和教师角色 毛玻璃效果的登录界面 教师模块 备课与设计:根据课程大纲自动设计教学内容 考核内容生成:自动生成多样化考核题目及参考答案 学情数据分析:自动化检测学生答案,提供数据分析 学生模块 在线学习助手:结合教学内容解答问题 实时练习评测助手:生成随练题目并纠错 管理模块 用户管理:管理员/教师/学生等用户基本管理 课件资源管理:按学科列表管理教师备课资源 大屏概览:使用统计、效率指数、学习效果等 技术栈 Vue3 TypeScript Pinia 状态管理 Ant Design Vue 组件库 Axios 请求库 ByteMD 编辑器 ECharts 图表库 Monaco 编辑器 双主题支持(专业科技风/暗黑风) 开发指南 # 安装依赖 npm install # 启动开发服务器 npm run dev # 构建生产版本 npm run build 简介 本项目旨在开发一个基于开源大模的教学实训智能体软件,帮助教师生成课前备课设计、课后检测问答,提升效率与效果,提供学生全时在线练习与指导,实现教学相长。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值