lesson6:java泛型总结

Intel Realsense windows安装与入门 realsense400系列介绍: https://www.intelrealsense.com/stereo-depth/?utm_source=intelcom_website&utm_medium=button&utm_campaign=day-to-day&utm_content=D400_learn-more_button realsense 435i介绍: ... 阅读详情

一.What?(什么是泛型)

Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。
泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。

二.Why?(为什么要泛型)

jdk1.5增加泛型主要是为了集合记住其元素类型,如果没有泛型的话,集合就会忘记数据的类型,把所有对象当做object类型处理,这样我们在取出来的时候,如果没有强制转换就会报ClassCastException,增加泛型之后就可以解决这种问题,我们在写代码时,如果添加了非满足类型,则会提示报错,这样会让程序更加简洁和健壮。
我们来看一段代码:

	public static void main(String[] args) {

		ArrayList arrayList = new ArrayList();
		arrayList.add("test");
		arrayList.add(1);

		for (int i = 0; i < arrayList.size(); i++) {
			String item = (String) arrayList.get(i);
			System.out.println(item);

		}
	}

上面的代码就是在没有使用泛型的情况下,我们在for循环取出数据时,如果没有做对应类型的强转,就会在控制台上报如下错误:Exception in thread “main” java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Stringat com.ts.beta.TsFanxing.main(TsFanxing.java:16),当然你也可以做对应的强转,这样就显得特臃肿。所以我们增加了泛型,在编译时就会给出提示,下面来看一段加了泛型的代码:

	public static void main(String[] args) {

		ArrayList<String> arrayList = new ArrayList();//指定了实际的添加数据类型为String类型
		arrayList.add("test");
		arrayList.add(1);//提示報錯,编译都不会通过,这样就保证了我们在添加和取出数据时,类型一致。

		for (int i = 0; i < arrayList.size(); i++) {
			String item = (String) arrayList.get(i);
			System.out.println(item);

		}
	}

这样用泛型的话,是不是增强了代码的健壮性,也不用强转了。

三.How?(怎样使用泛型)

当我们了解到什么是泛型,为什么需要泛型之后,我们就来讲一讲怎么使用泛型了。java中泛型有泛型方法、泛型类,泛型接口等,还有通配符等知识。那我们就一个一个的来说吧。

1.泛型方法

泛型方法声明都有一个类型参数声明部分(由尖括号分隔,可以有多个,用逗号隔开),该类型参数声明部分在方法返回类型之前,类型参数能被用来声明返回值类型,并且能作为泛型方法得到的实际参数类型的占位符。和普通方法相比多了类型参数声明。注意类型参数只能代表引用型类型,不能是原始类型(像int,double,char的等)结构一般如下:
修饰符 <T,S>(类型参数声明,多个用逗号隔开) 返回值类型 方法名(形参列表){ },举个例子,比如说打印任意类型的数组// 泛型方法
public static < E > void printArray( E[] inputArray )
{
// 输出数组元素
for ( E element : inputArray ){
System.out.printf( "%s ", element );
}
System.out.println();
}
我们在声明方法时,使用泛型定义类型参数,这样就可以打印任意类型的数组了。如果不使用泛型方法,可能你需要定义适应各种参数类型的打印方法了。

2.泛型类,接口

泛型类和泛型接口的声明和普通的声明相比是在类名后加上类型参数声明部分,和泛型方法一样,如果多个参数就用逗号隔开,这些类被称为参数化的类或参数化的类型。需要注意的点是: 1.如果子类继承参数化类型的父类,则需指定类型或不要尖括号,除非子类也是参数化的类型。2.静态属性、静态方法、初始化模块中不可食用泛型形参。

3. 通配符的使用

1.类型通配符一般是使用?代替具体的类型参数,先看个例子:

public static void main(String[] args) {

		Box<Number> name = new TsFanxing.Box<Number>(99);
		Box<Integer> age = new TsFanxing.Box<Integer>(712);
		printData(name);
//	    printData(age);   // 虽然Integer 是Number子类,但在泛型中并不是 所以在编译时提示报错
//	    The method printData(TsFanxing.Box<Number>) in the type TsFanxing 
//	    is not applicable for the arguments (TsFanxing.Box<Integer>)

	}

	public static void printData(Box<Number> data) {
		System.out.println("data :" + data.getData());
	}

	static class Box<T> {

		private T data;

		public Box() {

		}

		public Box(T data) {
			setData(data);
		}

		public T getData() {
			return data;
		}

		public void setData(T data) {
			this.data = data;
		}

	}

这个时候我们就需要用到通配符了,在getData这个方法将Number替换成类型通配符?便可解决。

2.类型通配符的限定.主要对类型实参又有进一步的限制,上限用extends关键字实现,如上面的printData可以这样用: public static void printData(Box<?exnteds Number> data) {
System.out.println(“data :” + data.getData());
}
这样就限定了实际参数必须是Number类或其子类,下限用super关键字,限定类型形参必须是其类或其父类。

本文如果不正之处。欢迎大家批评指正。

Luma AI技术浅析(一) 是一款基于人工智能的3D内容生成平台,旨在通过深度学习技术实现高效、高质量的3D场景、物体和动画的生成。Luma AI 主要利用了等技术,以实现从图像、视频到3D模型的转换和生成。 阅读详情

相关推荐

一文带你看懂SAP-HANA的基本架构与原理

创作不易,希望大家一键三连支持!!!♥♥♥创作不易,希望大家一键三连支持!!!♥♥♥创作不易,希望大家一键三连支持!!!♥♥♥。

丷江南南的博客 5077

Lesson 08:集合框架,泛型,异常

1 集合框架 Q:数组存储元素时,需要预先设定数组大小,需要动态改变大小时怎么办? A:借助链表或者集合类。 Java集合框架的体系结构(红框白底为接口,红底为类) 常见的几种集合类—— List结构的集合类:ArrayList类,LinkedList类,Vector类,Stack类 Map结构的集合类:HashMap类,HashTable类 Set...

132

Langfuse实战:从评估打分到问题解决的完整指南

本文详细介绍了如何利用开源LLM工程平台Langfuse对AI应用进行系统性评估与优化。从创建评估数据集、设计自动化评分函数,到深入排查常见问题并关联Trace进行精准打分,提供了完整的实战指南。最后,探讨了如何利用评估结果驱动提示词迭代与A/B测试,并给出了生产环境部署与性能优化的关键考量,帮助开发者构建可测量、可分析、可改进的LLM应用。

backprop5master的博客 651

泛型类型消除 lesson3

package rawtype; import java.util.Vector; //类型消除的使用,它可以向它的非泛型版本的一个引用分配一个泛型引用。 //??尽管编译时不会出错但是在编译的时候会出现未检查的警告 public class raw_type {  public void processIntValue(Vector v){   System.out.println(

yang255455的专栏 362

防雷防浪涌电路设计

通信线路或者电源线路通常会铺设到户外,一旦线路铺到户外后,就需要考虑防雷的问题了,那么怎么设计保护电路,能够防止雷电等浪涌对电路的破坏呢?

manhuami2007的博客 1万+

磁传感器技术解析:从霍尔效应到车规级应用,纳芯微的本土第一之路

磁传感器是现代工业与汽车电子中的关键感知元件,其技术演进经历了从分立器件到高集成度SoC的跨越。霍尔效应与磁阻效应构成两大物理基础,其中硅基霍尔方案凭借高性价比与成熟供应链,在车规级应用中占据主流。高精度电流检测、角度与位置感知、磁开关等场景,对传感器的温漂抑制、共模瞬态抗扰与批量一致性提出严苛要求。车规级可靠性体系与系统级集成能力,成为衡量供应商的核心标尺。随着新能源主驱、光伏逆变、工业伺服等应用爆发,具备完整信号链与隔离技术积累的厂商正逐步构建护城河。本文以纳芯微为样本,剖析其从隔离技术延伸至磁传感器平

weixin_34387468的博客 365

Lesson_for_java_day14--java中的泛型、Comparator、Comparable

泛型: Demo1:

u013233075的专栏 1186

R语言生存分析之竞争风险模型

R语言生存分析之竞争风险模型 竞争风险模型(Competing Risk Model)是一种处理多种潜在结局生存数据的分析方法,早在1999年Fine和Gray就提出了部分分布的半参数比例风险模型,通常使用的终点指标是累积发生率函数(cumulative incidence function,CIF)。 研究中结局事件可能有多个,某些结局将阻止感兴趣事件的出现或影响其发生的概率,各结局事件形成“竞争”关系,互为竞争风险事件。 竞争风险模型( Competing Risk Model ) : 指

data+scenario+science+insight 5248

泛型 lesson 1

/*泛型是可作用于任何类型使各种类保持编译时类型安全。  术语   参数化类型 parameterized type     类型变量   type variable  定义泛型类中使用到的参数,以及一个泛型类型对象被创建时被指定类型所替代的那些参数   泛型类     generic class  声明和实例化类时被参数化的类。也称参数化类       泛型类--->也称“参数化类

yang255455的专栏 184

《Python基础教程》内容总览篇(持续更新中)

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为优快云博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的知识进行总结与归纳,不仅形成深入且独到的理解,而且能够帮助新手快速入门。个人精心开设的《Python基础课程》专栏订阅量接近900,帮助不少同学解决了Bug。

weixin_43178406的博客 35万+

信奥赛csp初赛高频考点【位运算】(详细解析)

信奥赛csp初赛高频考点【位运算】(详细解析)

王老师青少年编程 371

Java学习之路(七):泛型

泛型的概述和基本使用 作用:把类型明确的工作推前到创建对象或者调用方法的时候 泛型是一种参数化类型,把类型当做参数一样传递来明确集合的元素类型 泛型的好处 提高安全性 省去强转的麻烦 泛型的基本使用 声明集合泛型的格式:List<String> li = new ArrayList<String>(); <>中存放的必须是引用...

weixin_30567225的博客 100

通信算法之320:DJI无人机云哨--信息包类型

大疆DJI无人机的云哨信息包主要分为四种类型:1)含经纬度位置、型号及序列号的完整数据包;2)仅含序列号的简化数据包;3)完全加密的数据包;4)加密密钥包。这些信息包格式不同,解析方式和应用场景也各异。如需更详细的技术资料,可联系作者获取。

leegang12的专栏 760

泛型 lesson2 泛型数组

import java.util.Vector; public class GenericArray {  public static void main(String[] args) {    Vector oldVector = new Vector();    oldVector.add(new Integer(3));    oldVector.add(new Integer(5

yang255455的专栏 223

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

fundamentals\java\java5新特性-泛型(译)

Generics-泛型 目录 Generics-泛型 概述 Lesson: Generics泛型-课程 Introduction-引言 Defining Simple Generics-简单的泛型 Generics and Subtyping-泛型与子类型 Wildcards-通配符 Bounded Wildcards-有界通配符 Generic Methods-泛型方法 I...

u012296499的博客 684

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Java SE Lesson 8

1.使用泛型时,编译无无错误,那么执行肯定没问题 2.限制泛型的可用类型,不管是具体的类,还是关键字都使用extends关键字,表示这个类型必须继承某个类,或是是吸纳某个接口 3.当没有指定泛型继承的类型或接口时,默认使用T extends Object,所以默认情况下任何类型都可以作为参数传入. 4.super关键字,指定类型只能是...

MsBook69MrBook 262

阿甘学java视频--lesson6

java文档化工具、java注释和分隔符、java的标识符、java中的51个关键字、java中的数据类型、数据转化、java对象的构造和初始化。

jason的java世界 1303

Lesson10-集合框架(初)

集合框架 集合是什么?集合其实就是一个容器,这个容器里面装着其他类型的数据,数组就是一种简单的集合。 然而集合并不能直接存储基本数据类型,另外集合也不能直接存储Java对象,集合当中储存的都是Java对象的内存地址(或者说集合中存储的是引用),需要注意的是,集合本身是Java中的一个容器,也是一个对象,任何时候,集合中存储的都是”引用“。 Java中的每一个不同的集合,底层都会对应不同的数据结构,常见的数据结构有数组、链表、二叉树、哈希表等等。 另外,所有的集合类和集合接口都在java.util包下。 Ja

AyinMars的博客 190

Java SE Lesson 7

1.HashSet底层使用HashMap实现的 当使用add方法将对象添加到Set当中时,实际上是将该对象作为底层所维护的Map对象的key,而value都是同一个Object对象(该对象对我们用) 2.HashSet的iterator()方法: 3.HashMap的底层实现: 负载因子:load_factor defaul...

MsBook69MrBook 167

JAVA入门——lesson 6

this 关键字 this 的用法:  普通方法中,this 总是指向调用该方法的对象。  构造方法中,this 总是指向正要初始化的对象。  this()调用重载的构造方法,避免相同的初始化代码。但只能在构造方法中用,并且 必须位于构造方法的第一句。  this 不能用于 static 方法中。  this 是作为普通方法的“隐式参数”,由系统传入到方法中。 【示例】this 的用法详解 public class TestThis { int a, b, c;

m0_63476911的博客 412

Java学习lesson 14

*数据结构 *栈结构(先进后出,后进先出)特点:进栈的方式叫压栈 出栈的方式叫弹栈 *队列(先进先出) *数组(查询快,增删慢) *链表结构有很多链子将多个节点连接起来每一个节点(数据):数据域(值)和指针域对于列表来说都是从第一个元素对应的指针域依次进行查询(从头开始找) *查询慢,增删快*List集合的子实现类的...

weixin_34032792的博客 133

JavaSE: Lesson13: ArrayList集合

JavaSE: Lesson13: ArrayList集合 1.ArrayList 1.1ArrayList类概述【理解】 什么是集合 ​ 提供一种存储空间可变的存储模型,存储的数据容量可以发生改变 ArrayList集合的特点 ​ 底层是数组实现的,长度可以变化 泛型的使用 ​ 用于约束集合中存储元素的数据类型 1.2ArrayList类常用方法【应用】 1.2.1构造方法 方法名 说明 public ArrayList() 创建一个空的集合对象 1.2.2成员方法

哔哔小鸡 271

北京圣思园_Java SE Lesson 7

Java SE Lesson 7   java.util Class TreeMap   构造方法: TreeMap(Comparator<? super K> comparator)           Constructs a new,empty tree map, ordered according to the given comparator.   TreeSet

AtlasShrugged的专栏 937

已前的学习笔记java lesson 18

java lesson 18 1. 有这样一个类: // getter and setter 要求:假如有若干个类Person对象存在一个List当中,对他们进行排序,分别按照名字、年龄、id进行排序(要有正序与倒序两种排序方式)。假如年龄或者姓名重复,按照id的正序进行排序。要求使用策略模式进行。 2. HashSet底层是使用HashMap实现的。当使用add方法将对象添加到Set当中...

netboy001的博客 192

黑马程序员-lesson10 jcjq

各种简写:IDE:Integrated Development Envirenmentjava ee: Java 2 Platform Enterprise Edition,JavaEE的核心是EJB3.0jms:jmx:jndi:透视图Perspective与视图view。良好

ccxztian的专栏 678

C++ lesson001

C过渡C++ 对比来说C++可以提高程序的抽象性和生产力,JAVA舍弃了灵活性和效率增加了生产力和抽象能力,C语音的生产力和抽象能力则不如C++和JAVA。 C++基本属于一个所有语音的集合体,其它语音包含的特有能力都会被C++吸收进去。 C语音属于过程式编程,C++支持过程式又不仅仅局限于过程式还支持基于对象(面向对象),泛型,数据抽象式,模板源,函数式等编程方式。值语义:对象允

lavelaveder 430

集合类 java学习 Lesson 6

集合框架中的接口 collection:集合层次中的根接口,JDK没有提供这个接口直接的实现类 set: 不能包含重复的元素。SortedSet是一个按照升序排列元素的Set。 List:是一个有序的集合,可以包含重复的元素。提供了按索引访问的方式。 Map:包含了key-value对。Map不能包含重复的key。SortedMap是一个按照升序排列key的Map。 集合

745
上一篇: lesson5:java异常机制总结
下一篇: lesson7:java的IO流
android_seven
博客等级 码龄11年 8粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值