Java基础一篇过(二)泛型
一、啥是泛型
概述
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,即所操作的数据类型被指定为一个参数。
格式
类名<类型名>
标记符
- E - Element (在集合中使用,因为集合中存放的是元素)
- T - Type(Java 类)
- K - Key(键)
- V - Value(值)
- N - Number(数值)
- ? - 表示不确定的java类型(通配符)
- S、U、V、 - 用在第2、3、4个参数类型时使用
二、代码走一波
汽车类
/**
* 汽车类
*/
@Data
public class Car {
/*无参构造*/
public Car() { } /*带参构造*/
public Car(int id, String name, String Type) {
this.id = id;
this.name = name;
this.Type = Type;
} /*属性*/
private int id;//编号
private String name;//名称
private String Type;//类型
}
猫猫类
/**
* 宠物类
*/
@Data
public class Pet {
/*无参构造*/
public Pet() { } /*带参构造*/
public Pet(int id, String name, String Type) {
this.id = id;
this.name = name;
this.Type = Type;
} /*属性*/
private int id;//编号
private String name;//名称
private String Type;//类型
}
泛型类
/**
* 泛型测试类
*
* @param <T> 参数1(泛型对象)
* @param <S> 参数2(继承Pet类的泛型对象)
*/
@Data
public class User<T, S extends Pet> {
/*带参构造*/
public User(int id, String name, String Type, List<T> t, List<S> s) {
this.id = id;
this.name = name;
this.Type = Type;
this.tList = t;
this.sList = s;
} /*泛型属性*/
private List<T> tList;//泛型List
private List<S> sList;//继承Pet类的泛型List /*一般属性*/
private int id;//编号
private String name;//名称
private String Type;//类型 /*重写toString()方法*/
@Override
public String toString() {
String msg = "id为【%s】的【%s】用户【%s】拥有猫猫【%s】和汽车【%s】";
return String.format(msg, this.id, this.Type, this.name, this.sList.toString(), this.tList.toString());
}
}
测试类
/**
* 测试类
*/
public class Test {
public static void main(String args[]) {
List<Pet> petList = new ArrayList<Pet>();
petList.add(new Pet(1, "汤圆", "英短"));
petList.add(new Pet(2, "糯米", "英短"));
petList.add(new Pet(3, "咖喱", "田园")); List<Car> carList = new ArrayList<Car>();
carList.add(new Car(1, "标志", "小轿车"));
carList.add(new Car(2, "哈弗", "SUV")); User user = new User(1, "ZH", "男性", carList, petList);//第5个参数如果不是一个继承了Pet类的List,则编译会报错
System.out.println(user.toString());
}
}
输出
小结
我们知道Object类是所有类的父类,在引入泛型概念之前,我们常用Object的引用来实现参数的“任意化”。
痛点:
- 要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。
- 对于强制类型转换错误的情况 ,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。
泛型的好处:
- 通过IDE进行代码类型初步检查,然后在编译阶段进行编译类型检查,避免运行时异常,以保证类型转换的安全性。
- 所有的强制转换都是自动和隐式的,可以提高代码的重用率。
Java基础一篇过(二)泛型的更多相关文章
- JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费者、线程池、匿名内部类使用多线程、定时器、面试题
JAVA基础再回首(二十五)--Lock锁的使用.死锁问题.多线程生产者和消费者.线程池.匿名内部类使用多线程.定时器.面试题 版权声明:转载必须注明本文转自程序猿杜鹏程的博客:http://blog ...
- java基础-引用数据类型之二维数组(Array)
java基础-引用数据类型之二维数组(Array) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 之前我们学习过了Java的一维数组,所谓的二维数组就是元素是一堆一维数组的数组,换 ...
- Java 基础(一)| 使用泛型的正确姿势
前言 为跳槽面试做准备,今天开始进入 Java 基础的复习.希望基础不好的同学看完这篇文章,能掌握泛型,而基础好的同学权当复习,希望看完这篇文章能够起一点你的青涩记忆. 一.什么是泛型 泛型,即&qu ...
- java基础知识一览(二)
一.java基础知识 1.一个文件中只能有一个public的类,因为他的类名要求和文件名相同. 2.classpath变量可以设置其它目录下的类. 例如:类文件所在目录是:F:\Javajdk,那么没 ...
- java基础——入门篇
整体大纲图 1.认识java 核心知识点:JVM.搭建Java开发环境.java的发展史.java特点.java程序类型.垃圾收集器.J2SE下载和安装.环境变量的配置和测试.以及简单的开发工具的使用 ...
- JAVA基础——编程练习(二)
JAVA编程练习(二) 今天我为了巩固之前的java基础知识的学习,再次进行实战演习,编写了一个小小的java控制台程序,主要是运用java面向对象的思想来完成这个小项目. 一.项目背景介绍 根据所学 ...
- java基础梳理--朝花夕拾(二)
1.Java语言语法规则和文件格式: 第一个Java程序:/** 第一个Java程序:控制台输出Hello world!*/public class Test{ //访问修饰符 class关键词 ...
- JS基础入门篇(二十七)—BOM
虽然上次写到js基础篇(二十四),这次直接写到(二十七).是为了提醒自己中间有几篇没写.特此说明一下啊. 1.window.open() 使用a标签呢,点击一下a标签页面才会跳转,有时候我们需要做的操 ...
- 夯实Java基础(十八)——泛型
1.什么是泛型 泛型是Java1.5中出现的新特性,也是最重要的一个特性.泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类. ...
- Java基础学习总结(二)
Java语言的特点: Java语言是简单的 Java语言是面向对象的 Java语言是跨平台(操作系统)的(即一次编写,到处运行) Java是高性能的 运行Java程序要安装和配置JDK jdk是什么? ...
随机推荐
- 强化学习中的经验回放(The Experience Replay in Reinforcement Learning)
一.Play it again: reactivation of waking experience and memory(Trends in Neurosciences 2010) SWR发放模式不 ...
- 如何使用python移除/删除非空文件夹?
移除/删除非空文件夹/目录的最有效方法是什么? 1.标准库参考:shutil.rmtree. 根据设计,rmtree在包含只读文件的文件夹树上失败.如果要删除文件夹,不管它是否包含只读文件,请使用 i ...
- Camera学习--光源
进入CV 领域,视频图像的成像,最前端的camera,camera的sensor 以及影响成像质量的光源,噪声等因素是绕不开的问题. 那么今天就从成像的光源说起. 标准光源(Standard Ligh ...
- 小程序5:FTP程序
目录 1.FTP程序所需要的知识点 2.FTP程序具体实现过程 2.1 FTP程序之注册功能 2.2 FTP程序之登录功能 2.3 FTP程序之下载功能 3.FTP程序源代码 FTP程序所需要的知识点 ...
- 模拟画图题P1185 绘制二叉树
题目链接P1185 绘制二叉树 题意概述 根据规则绘制一棵被删去部分节点的满二叉树.节点用 \(o\) 表示,树枝用/\表示.每一层树枝长度会变化,以满足叶子结点有如下特定: 相邻叶子节点是兄 ...
- Excel—LEFT、RIGHT、MID函数提取不同位置的字段
概述 函数方法不只是适用下述场景,主要目的是在不同业务场景中个人解决问题的思维方法: 下图中数据都为测试数据,不具备真实性! 场景一 数据库Task表中存储的实际任务id太长,但PC/移动端看到展示的 ...
- quartz表(11张)
/* Navicat Premium Data Transfer Source Server : 本地连接 Source Server Type : MySQL Source Server Versi ...
- vue-cli根据不同的命令自动切换不同环境地址
前言 我们再使用vue脚手架开发项目时,不可避免的涉及到多个环境来回切换接口调用地址的问题,在开发环境中可能会通过 ip 来访问后台接口,但是当项目上线后就要把对用的接口地址换成生产环境的地址,肯定不 ...
- VS2015+opencv3.1.0 imshow()函数出现中文乱码----问题一
Visual Studio提供高级保存选项功能,它能指定特定代码文件的编码规范和行尾所使用的换行符.在Visual Studio 2015中,该命令没有默认显示在“文件”菜单中.用户需要手工设置,才能 ...
- 【Gin-API系列】Gin中间件之鉴权访问(五)
在完成中间件的介绍和日志中间件的代码后,我们的程序已经基本能正常跑通了,但如果要上生产,还少了一些必要的功能,例如鉴权.异常捕捉等.本章我们介绍如何编写鉴权中间件. 鉴权访问,说白了就是给用户的请求增 ...
