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);
}
注意:
(1)JDK5.0后集合类定义像Vector一样都进行了泛型化改造,还有泛型类带有多个类型参数,如Map<K,V>就有两个类型参数,表示键-值映射。
(2)Java语言中的泛型是维护向后兼容的,即我们完全可以不采用泛型,而继续沿用过去的做法。
(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 串口调试工具,用来和底层进行一些握手协议的调试。
机械设计自动锁垫片机(sw18可编辑+工程图+BOM)非常好的设计图纸100%好用.zip
基于Mediapipe的手势识别前端应用可执行程序+说明.zip # 项目简介 * 基于AutoHotkey制作的摄像头手势识别软件。能让你的电脑摄像头在识别手势后,执行自定义的电脑操作命令。同时也集成了语音识别功能,可调用Windows自带API实现简单的语音助手功能。 * 手势识别调用了高性能的Mediapipe动态链接库来免部署实现。而电脑自动化操作使用AutoHotkey脚本语言来实现,它能更方便的对电脑进行深度调用和流程自动化处理。 # 使用介绍 * 测试环境:Win10 64位(专业版完整镜像) * **第一次运行 Visual_Gesture_Recognition.exe**时,会提示下载手势识别的**依赖包**。点击**确定**后,跟着提示**点击自动下载**
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烟花代码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
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中,可以使用多种方法来创建一个虚拟棋盘。下面是一个简单的示例,使用字符串和循环来创建一个8x8的国际象棋棋盘。 这段代码定义了一个函数print_chessboard,它首先定义了棋盘的一半,然后通过循环来构建整个棋盘。棋盘的每个格子用空格分隔,并且棋盘的行号用数字表示。棋盘的黑白格子使用字符串white和black来表示,其中white表示白格子,而black表示黑格子。 运行这段代码,你会在控制台看到一个8x8的棋盘,其中棋盘的行号从1到8,列号从A到H,棋盘的黑白格子交替出现。 请注意,这个棋盘是虚拟的,仅用于展示布局,并没有实现任何棋盘游戏的逻辑。如果你需要实现一个可以进行游戏的棋盘,你需要添加更多的代码来处理棋子的移动和游戏规则。
系统使用了Modbus协议完成数据的获取工作,通过Mqtt协议与后端进行连接,获取了数据,完成了数据采集工作。后端通过对数据的处理,进行了数据存储,和接口api的处理。通过WebSocket协议来推送数据。前端展示请求的后端数据。通过此流程完成了工业暖通空调系统的开发。
机械设计大倾角波状挡边带式输送机sw17可编辑非常好的设计图纸100%好用.zip
常见移动变现术语(mobile monetization).docx
把input里面的数据替换成自己的数据,打开R,点Run,可以直接出图!文件适合有R语言基础的同学。
福克斯初级和猎犬初级电线追踪工具包使用说明书
数据库实验报告 SJK完整性语言
PDU8000 ATS配电箱-T 快速指南
串口协议 串口通过 YMODEM 协议进行文件传输 开发环境 框架:Qt 5.7.1 编译器:MSVC2015_64bit IDE:Qt Creator 4.2.0 社区版 操作系统:Windows 10 专业版
开发语言: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 操作手册