`
mywebcode
  • 浏览: 999889 次
文章分类
社区版块
存档分类
最新评论

11级_Java_曹建波4.27 Java中的泛型编程

 
阅读更多

Java中的泛型编程

泛型是JDK1.5后出现的一个安全机制

好处:1.将运行时期出现的问题转移到编译时期。

2.避免了强制类型转换的麻烦

通过<>来指定容器中元素的类型

泛型的思想
消除取用集合元素时代码中的强制类型转换,比如事先规定好一个集合中允许加入的具体元素类型,然后在编译环节实现集合中添加元素的类型检查,以防止有人将非预期类型的元素保存到集合中。

优点
类型错误可以在编译时暴露出来,而不是在运行时才发作(抛ClassCastException),这有助于早期错误排查,并提高程序的可靠性。

使用泛型的Vector

java.util包里的Vector类的泛型声明:

publicclassVector<E>{

voidadd(Ex);

….

}

Vector<Integer>c=newVector<Integer>();

c.add(15);c.add(newInteger(10));

//c.add("name");

for(inti=0;i<c.size();i++){

Integervalue=c.get(i);System.out.println(value);

}

注意:

1JDK5.0后集合类定义像Vector一样都进行了泛型化改造,还有泛型类带有多个类型参数,如Map<K,V>就有两个类型参数,表示键-值映射。

2Java语言中的泛型是维护向后兼容的,即我们完全可以不采用泛型,而继续沿用过去的做法。

3)在高版本开发环境中编译未启用泛型机制的集合类应用代码时,会输出编译提示信息。

当类中操作的引用数据类型不能确定是,就使用泛型类。

类中要操作什么类型的数据不确定,就可以定义一个类型参数。

使用者,传递什么样的类型,那么该类中操作的就是什么类型数据。

classStudent<T>

{ privateStringname;

privateTt;

publicStudent(Stringname,Tt){

this.name=name;

this.t=t;

}

publicTgetT(){

returnt;

}

}

classTestStu{

publicstaticvoidmain(String[]args){

Student<String>stu1=

newStudent<String>("张三","软件学院");

Student<Double>stu2=

newStudent<Double>("李四",95.0);

Stringaddress=stu1.getT();

Doubled=stu2.getT();

System.out.println(address);

System.out.println(d);

}

}

classTestGeneric

{

publicstaticvoidmain(String[]args){

Vector<String>c=newVector<String>();

c.add("aaa");

Vector<Integer>v=newVector<Integer>();

v.add(123);

printC(c);

printC(v);}

staticvoidprintC(Vector<?>c){

Iterator<?>it=c.iterator();

while(it.hasNext()){

System.out.println(it.next());

}

}

}

为了更好的在定义泛型类时对类型参数进行限制,泛型机制还允许对类型参数进行附加的约束。

<TextendsPerson>

类型参数为Person类或者Person类的子类

classPerson

{ publicvoidp(){

System.out.println("Person");

}

}

classStudentextendsPerson

{ publicvoidp(){

System.out.println("student");

}

}

classTeacherextendsPerson

{ publicvoidp(){

System.out.println("teacher");

}

}

classTestGeneric2<TextendsPerson>

{privateTt;

publicTestGeneric2(Tt){

this.t=t;

}

publicvoidtestp(){

t.p();}

publicstaticvoidmain(String[]args){

TestGeneric2<Person>tg2=

newTestGeneric2<Person>(newPerson());

tg2.testp();

TestGeneric2<Student>tg3=

newTestGeneric2<Student>(newStudent());

tg3.testp();

TestGeneric2<Teacher>tg4=

newTestGeneric2<Teacher>(newTeacher());

tg4.testp(); }

}

泛型方法:就是将泛型定义在方法上。

泛型定义在类上,该泛型作用于整个类。

将泛型定义在方法上即可让使用泛型的方法操作不同类型数据。

格式:<T>返回类型方法名(Tt)

classTestGeneric3

{

public<T>voidgtest(Tt){

System.out.println(t.getClass().getName());

}

publicstaticvoidmain(Stringargs[]){

TestGeneric3tg=newTestGeneric3();

tg.gtest("");

tg.gtest(tg);

tg.gtest(123);

}

}

静态方法不可以使用类中定义的泛型。

因为类中的泛型需要在对象初始化的时,指定具体类型。

而静态优先与对象存在。

在静态方法上定义泛型,一定要写在static关键字的后面。返回值类型的前边。

classUtil<T>

{

publicvoiddisplay(Tt){

System.out.println(t);

}

}

classTestGeneric4

{

publicstaticvoidmain(String[]args){

Util<String>u=newUtil<String>();

u.display("abc");

}

}

classUtil

{

publicstatic<T>voiddisplay(Tt){

System.out.println(t);

}

}

分享到:
评论

相关推荐

    Android开发BLE 串口调试工具,用来和底层进行一些握手协议的调试

    【Android】开发BLE 串口调试工具,用来和底层进行一些握手协议的调试。

    机械设计自动锁垫片机(sw18可编辑+工程图+BOM)非常好的设计图纸100%好用.zip

    机械设计自动锁垫片机(sw18可编辑+工程图+BOM)非常好的设计图纸100%好用.zip

    基于Mediapipe的手势识别前端应用可执行程序+说明.zip

    基于Mediapipe的手势识别前端应用可执行程序+说明.zip # 项目简介 * 基于AutoHotkey制作的摄像头手势识别软件。能让你的电脑摄像头在识别手势后,执行自定义的电脑操作命令。同时也集成了语音识别功能,可调用Windows自带API实现简单的语音助手功能。 * 手势识别调用了高性能的Mediapipe动态链接库来免部署实现。而电脑自动化操作使用AutoHotkey脚本语言来实现,它能更方便的对电脑进行深度调用和流程自动化处理。 # 使用介绍 * 测试环境:Win10 64位(专业版完整镜像) * **第一次运行 Visual_Gesture_Recognition.exe**时,会提示下载手势识别的**依赖包**。点击**确定**后,跟着提示**点击自动下载**

    node-v4.8.0.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    python烟花代码.zip

    python烟花代码python烟花代码.zip python烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zip

    如何提高APP商业变现能力.docx

    如何提高APP商业变现能力.docx

    node-v12.19.1-linux-ppc64le.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    数据分析:揭示数据背后的智慧与力量

    在数字化时代,数据已成为一种宝贵的资源,而数据分析则是解锁这一资源的关键。数据分析是指运用适当的统计分析和数据挖掘方法,对收集来的大量数据进行详细的研究和概括总结,以最大化地开发数据的功能,发挥数据的作用。 数据分析的过程涉及数据的收集、整理、转化、建模和解释等多个环节。通过对比分析法、分组分析法、结构分析法等多种方法,我们能够深入挖掘数据中的隐藏信息和内在规律,为企业决策、市场研究、科学研究等领域提供有力的支持。 数据分析在现代社会中的应用越来越广泛。例如,在市场调研中,通过对消费者需求、竞争品牌分布等数据的分析,企业可以了解市场潜力、竞争优势和定位策略,从而制定有效的市场推广策略。在社交媒体数据分析中,企业可以通过分析用户的关注人群、点赞、转发等行为,揭示用户的兴趣爱好、消费倾向和口碑传播效果,从而制定有针对性的营销策略。 数据分析工具和技术的发展也极大地推动了数据分析的普及和应用。如R语言和Python语言等编程工具,以及SAS等商业化的数据分析软件,都为数据分析提供了强大的支持。这些工具不仅具有丰富的统计函数和图表绘制能力,还具有高度的灵活性和可扩展性,可以满足各种要求

    水和废水处理化学品的选择和使用指南

    水和废水处理化学品的选择和使用指南

    python输出虚拟棋盘代码示例

    在Python中,可以使用多种方法来创建一个虚拟棋盘。下面是一个简单的示例,使用字符串和循环来创建一个8x8的国际象棋棋盘。 这段代码定义了一个函数print_chessboard,它首先定义了棋盘的一半,然后通过循环来构建整个棋盘。棋盘的每个格子用空格分隔,并且棋盘的行号用数字表示。棋盘的黑白格子使用字符串white和black来表示,其中white表示白格子,而black表示黑格子。 运行这段代码,你会在控制台看到一个8x8的棋盘,其中棋盘的行号从1到8,列号从A到H,棋盘的黑白格子交替出现。 请注意,这个棋盘是虚拟的,仅用于展示布局,并没有实现任何棋盘游戏的逻辑。如果你需要实现一个可以进行游戏的棋盘,你需要添加更多的代码来处理棋子的移动和游戏规则。

    基于modbus协议的大屏数据监控,使用modbus slave模拟数据,串口服务器获取温湿度

    系统使用了Modbus协议完成数据的获取工作,通过Mqtt协议与后端进行连接,获取了数据,完成了数据采集工作。后端通过对数据的处理,进行了数据存储,和接口api的处理。通过WebSocket协议来推送数据。前端展示请求的后端数据。通过此流程完成了工业暖通空调系统的开发。

    机械设计大倾角波状挡边带式输送机sw17可编辑非常好的设计图纸100%好用.zip

    机械设计大倾角波状挡边带式输送机sw17可编辑非常好的设计图纸100%好用.zip

    常见移动变现术语(mobile monetization).docx

    常见移动变现术语(mobile monetization).docx

    R语言绘制SCI科研小提琴图源代码.zip

    把input里面的数据替换成自己的数据,打开R,点Run,可以直接出图!文件适合有R语言基础的同学。

    福克斯初级和猎犬初级电线追踪工具包使用说明书

    福克斯初级和猎犬初级电线追踪工具包使用说明书

    数据库实验报告 SJK完整性语言

    数据库实验报告 SJK完整性语言

    PDU8000 ATS配电箱-T 快速指南

    PDU8000 ATS配电箱-T 快速指南

    串口通过 YMODEM 协议进行文件传输

    串口协议 串口通过 YMODEM 协议进行文件传输 开发环境 框架:Qt 5.7.1 编译器:MSVC2015_64bit IDE:Qt Creator 4.2.0 社区版 操作系统:Windows 10 专业版

    springboot(题库管理系统)

    开发语言:Java JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:mysql 5.6/5.7(或8.0) 数据库工具:Navicat 开发软件:idea 依赖管理包:Maven 代码+数据库保证完整可用,可提供远程调试并指导运行服务(额外付费)~ 如果对系统的中的某些部分感到不合适可提供修改服务,比如题目、界面、功能等等... 声明: 1.项目已经调试过,完美运行 2.需要远程帮忙部署项目,需要额外付费 3.本项目有演示视频,如果需要观看,请联系我 4.调试过程中可帮忙安装IDEA,eclipse,MySQL,JDK,Tomcat等软件 重点: 需要其他Java源码联系我,更多源码任你选,你想要的源码我都有! https://img-blog.csdnimg.cn/direct/e73dc0ac8d27434b86d886db5a438c71.jpeg

    SITOP 电源电源电源电源 20 6EP1 536-2AA00 操作手册

    SITOP 电源电源电源电源 20 6EP1 536-2AA00 操作手册

Global site tag (gtag.js) - Google Analytics