Java泛型结合实例详解

2024-09-04 21:32
文章标签 java 详解 实例 结合 泛型

本文主要是介绍Java泛型结合实例详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

浏览过一些介绍泛型的博客,感觉一些学术定义的陈列还是比较晦涩难懂,在这里我以一个打印学生年龄的例子来介绍一下自己对泛型的理解。

package 泛型;public class GenericDemo {
public static void main(String[] args) {Children<Integer> c1=new Children<Integer>("小白",20);Children<Float> c2=new Children<Float>("小红",24.2f);Children<String> c3=new Children<String>("小白","三十");int t1=c1.getAge();float t2=c2.getAge();String t3=c3.getAge();System.out.println(c1.getName()+"的年龄是"+t1+"岁");System.out.println(c2.getName()+"的年龄是"+t2+"岁");System.out.println(c3.getName()+"的年龄是"+t3+"岁");}
}
class Children<T>{private String name;private T age;public String getName() {return name;}public void setName(String name) {this.name = name;}public T getAge() {return age;}public void setAge(T age) {this.age = age;}public Children(String name,T age) {super();this.name=name;this.age=age;}}

输出结果

一.泛型的使用规则

首先看一下Children类,第一行程序class Children< T >便出现了泛型的运用,表明类使用泛型,泛型用单书名号表示——<>,其中T只是一个标志(比较常用),我们可以定义任何内容为标志,比如class Children < SB >。

二.为何要使用泛型

今天我们围绕Children类的age属性来介绍泛型,那么我们来看代码“private T age;”,这里T代表一种特殊的数据类型——泛型,那么我们为什么不用常规的数据类型来定义呢(比如 int,String,float等等),问题就出在这里,假如我们用int来定义年龄age,也就是

private int age;
public Children(String name,int age){}//构造函数

那么前面主函数中Children c1=new Children("小白",20);可以通过int t1=c1.getAge();来拆箱,到最后通过System.out.println(c1.getName()+"的年龄是"+t1+"岁");输出。可以,程序运行成功。

好了,假如我想用浮点数表示呢,用字符串表示呢,比如要输出的是“三十”岁,可以这样写吗??——Children c3=new Children("小白","三十");很明显是不可以的,因为在构造方法中早将age限制为了int型public Children(String name,int age),那么有没有一种做法可以同时定义多种数据类型,用户年龄想用什么数据类型表示都可以,当然有,那就是广泛的类型——泛型

三.怎么使用泛型

在这里我们这样来定义一个类class Children<T>{}这样来定义一个变量private T age;这样来写构造函数public Children(String name,T age){}
在主类中我们采用拆箱直接赋值的方式

int t1=c1.getAge();   //age为整型
float t2=c2.getAge();   //age为浮点型
String t3=c3.getAge();   //age为字符串

最后输出

 System.out.println(c1.getName()+"的年龄是"+t1+"岁");System.out.println(c2.getName()+"的年龄是"+t2+"岁");System.out.println(c3.getName()+"的年龄是"+t3+"岁");

四 .总结
本文介绍的是泛型最浅显的理解,不过也是最容易接受的,适合像作者一样菜的鸟,随着学习的深入,将会继续完善文章内容,从泛型的学习可以看到Java开发者为我们想到了所有可能带来麻烦的情况,足以体现Java无穷的潜力和魅力。

五.问题
如果我们将age定义为Object类可以实现吗????

这篇关于Java泛型结合实例详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1137082

相关文章

springboot集成easypoi导出word换行处理过程

《springboot集成easypoi导出word换行处理过程》SpringBoot集成Easypoi导出Word时,换行符n失效显示为空格,解决方法包括生成段落或替换模板中n为回车,同时需确... 目录项目场景问题描述解决方案第一种:生成段落的方式第二种:替换模板的情况,换行符替换成回车总结项目场景s

SpringBoot集成redisson实现延时队列教程

《SpringBoot集成redisson实现延时队列教程》文章介绍了使用Redisson实现延迟队列的完整步骤,包括依赖导入、Redis配置、工具类封装、业务枚举定义、执行器实现、Bean创建、消费... 目录1、先给项目导入Redisson依赖2、配置redis3、创建 RedissonConfig 配

SpringBoot中@Value注入静态变量方式

《SpringBoot中@Value注入静态变量方式》SpringBoot中静态变量无法直接用@Value注入,需通过setter方法,@Value(${})从属性文件获取值,@Value(#{})用... 目录项目场景解决方案注解说明1、@Value("${}")使用示例2、@Value("#{}"php

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

springboot中使用okhttp3的小结

《springboot中使用okhttp3的小结》OkHttp3是一个JavaHTTP客户端,可以处理各种请求类型,比如GET、POST、PUT等,并且支持高效的HTTP连接池、请求和响应缓存、以及异... 在 Spring Boot 项目中使用 OkHttp3 进行 HTTP 请求是一个高效且流行的方式。