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是什么? ...
随机推荐
- Magento 2 Factory Objects
In object oriented programming, a factory method is a method that’s used to instantiate an object. F ...
- max user processes 导致的服务器大量close_wait问题解决过程
1.背景: 由于现网业务量增长过快,需要扩容应用程序服务器,分担来自前端的访问压力. 2.故障: 部署好业务启动程序后,发现程序运行一小会后不产生新的日志和数据. 3.查问题过程: 1.首先查看程序运 ...
- springMVC入门(八)------拦截器
简介 springMVC拦截器针对处理器映射器进行拦截配置 如果在某个处理器映射器中配置拦截,经过该处理器映射器映射成功的Handler最终使用该拦截器 由于springMVC支持配置多个处理器映射器 ...
- BIGI行情-实时行情数据源接口websocket接入方法
BIGI行情-实时行情数据源接口socket接入方法1.国际期货.国内期货.外汇.贵金属.现货.期权.股指.数字货币和A股实时行情和历史行情2.推送的有:socket,websocket,http接收 ...
- python连接mysql中报错1064修改方法
Python是编程语言,MySQL是数据库,它们是两种不同的技术:要想使Python操作MySQL数据库需要使用驱动.这里选用PyMySQL驱动.下载地址: https://pypi.python.o ...
- static,private,final,abstract,protected
1,static:静态变量:位于方法区中,只有一份,这个类的所有实例共享,不可以被继承 静态方法:直接通过类就能调用,静态方法中只能使用静态变量,不可以被继承 2,private:类不能用privat ...
- SEO工程师考试题目
http://www.wocaoseo.com/thread-201-1-1.html SEO,全名Search Engine Optimization,其中文名字为'搜索引擎优化' .其英 ...
- 借助FRP反向代理实现内网穿透
一.frp 是什么? frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP.UDP.HTTP.HTTPS 等多种协议.可以将内网服务以安全.便捷的方式通过具有公网 IP 节点的中转暴露到公 ...
- mysql 8.0.19 win10快速安装教程
本文教程为大家分享了mysql 8.0.19安装教程,供大家参考,具体内容如下 1.下载.zip安装文件 2.根目录存放my.ini,文件路径用“/”分割,例如: [mysqld] port=3306 ...
- 2020.08.31 Unit 10(暂未完成)
[重点短语] 01.at night 在晚上 02.in a more natural environment 在一个更加自然的环境中 03.all year round 一年到头,终年 04.be ...
