详解Java常用工具类—泛型

 更新时间:2019年03月27日 09:41:10   作者:LSmurfs  
这篇文章主要介绍了Java常用工具类—泛型,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、泛型概述

1、背景

在Java中增加泛型之前,泛型程序设计使用继承来实现的。
坏处:

需要进行强制类型转换
可向集合中添加任意类型的对象,存在风险

2、泛型的使用

List<String> list=new ArrayList<String>();

3、多态与泛型

class Animal{}
class Cat extends Animal{}
List<Animal> list=new ArrayList<Cat>(); //这是不允许的,变量声明的类型必须匹配传递给实际对象的类型。

其它错误的例子:

List<Object> list=new ArrayList<String>();
List<Number> number=new ArrayList<Integer>();

4、泛型内容

  1. 泛型作为方法参数
  2. 自定义泛型类
  3. 自定义泛型方法

 二、泛型作为方法参数

泛型作为参数时,如果参数为多个子类,可以使用(List<? extends 父类> xxx)。这种情况下,在调用方法时,就可以传递父类及其子类作为参数了。
还有一个:(List<? super 类> xxx)。这种情况下是指类及其超类(父类)。

三、自定义泛型

public class NumGeneric<T> {
	private T num;

	public NumGeneric() {
		
	}

	public NumGeneric(T num) {
		this.setNum(num);
	}

	public T getNum() {
		return num;
	}

	public void setNum(T num) {
		this.num = num;
	}
	
	//测试
	public static void main(String[] args) {
		NumGeneric<Integer> intNum = new NumGeneric<>();
		intNum.setNum(10);
		System.out.println("Integer:" + intNum.getNum());
		
		NumGeneric<Float> floatNum = new NumGeneric<>();
		floatNum.setNum(5.0f);
		System.out.println("Float:" + floatNum.getNum());
	}
}

泛型类的定义和使用,可以传进不同类的对象作为参数

四、自定义泛型方法

public <T extends Number> void printValue(T t) {
	System.out.println(t);
}

注意:

  1. 泛型方法不一定在泛型类里面
  2. <T>必须写在修饰符和返回值类型之间。

 五、泛型总结

1、为什么使用泛型

不用进行强制类型转换,避免运行时异常的安全隐患

2、变量声明的类型必须匹配传递给实际对象的类型。

3、泛型作为方法参数

public void sellGoods(List<? extends Goods> goods)

表示可以是Goods及Goods类的子类作为泛型的参数类型,extends后面除了跟类的名字,还可以跟接口的名字。

4、public void sellGoods(List<? super Goods> goods)

表示可以是Goods类以及其超类作为泛型的参数类型

5、自定义泛型类

6、自定义泛型方法

以上所述是小编给大家介绍的Java常用工具类—泛型详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • feign远程调用无法传递对象属性405的问题

    feign远程调用无法传递对象属性405的问题

    这篇文章主要介绍了feign远程调用无法传递对象属性405的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Java 二分法检索算法代码实现详解

    Java 二分法检索算法代码实现详解

    这篇文章主要介绍了Java 二分法检索算法代码实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • IntelliJ IDEA中查看当前类的所有继承关系图

    IntelliJ IDEA中查看当前类的所有继承关系图

    今天小编就为大家分享一篇关于IntelliJ IDEA中查看当前类的所有继承关系图,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • SpringBean和Controller实现动态注册与注销过程详细讲解

    SpringBean和Controller实现动态注册与注销过程详细讲解

    这篇文章主要介绍了SpringBean和Controller实现动态注册与注销过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-02-02
  • 实现一个基于Servlet的hello world程序详解步骤

    实现一个基于Servlet的hello world程序详解步骤

    Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层
    2022-02-02
  • SpringBoot3.0整合chatGPT的完整步骤

    SpringBoot3.0整合chatGPT的完整步骤

    ChatGPT是OpenAI推出的一个语言模型系统,它能够实时回答用户提问,包括聊天、纠正语法错误,甚至是写代码、写剧本等,由于可玩性很高,迅速在全球范围内风靡起来,下面这篇文章主要给大家介绍了关于SpringBoot3.0整合chatGPT的完整步骤,需要的朋友可以参考下
    2022-12-12
  • Java中PriorityQueue实现最小堆和最大堆的用法

    Java中PriorityQueue实现最小堆和最大堆的用法

    很多时候都会遇到PriorityQueue,本文主要介绍了Java中PriorityQueue实现最小堆和最大堆的用法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • Java反射根据不同方法名动态调用不同的方法(实例)

    Java反射根据不同方法名动态调用不同的方法(实例)

    下面小编就为大家带来一篇Java反射根据不同方法名动态调用不同的方法(实例)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-08-08
  • SpringBoot集成JmsTemplate(队列模式和主题模式)及xml和JavaConfig配置详解

    SpringBoot集成JmsTemplate(队列模式和主题模式)及xml和JavaConfig配置详解

    这篇文章主要介绍了SpringBoot集成JmsTemplate(队列模式和主题模式)及xml和JavaConfig配置详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • Java中如何用Stream分组并求各组数量

    Java中如何用Stream分组并求各组数量

    这篇文章主要给大家介绍了关于Java中如何用Stream分组并求各组数量的相关资料,文中通过实例代码,对大家学习或者Java具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07

最新评论