首页 > 编程语言 >Java泛型总结

Java泛型总结

时间:2022-10-04 23:02:18浏览次数:45  
标签:总结 Java 通配符 Cat 类型 参数 泛型 super

 

为什么会有泛型?泛型是用来干什么的?

泛型其本质是参数化类型,也就是说所操作的数据类型被指定为一个参数这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。

类型的参数化,我们学过java中的方法,在java的方法中,我们可以定义一个形参,让后在调用方法时给他传入一个实参。泛型就是让类型像参数那样传递。

如果没有泛型的话,这些容器在设计的时候只能默认设计成装Object类型对象。因为Java里Object是根类。代码如下:

但是这样设计的话会出现两个问题:

1、可能编译时会通过,但是运行时会异常。出现ClassCastException异常。

2、类型的转换,进行装箱与拆箱,消耗性能。

用泛型改良后:

这样设计的容器在使用时编译器就可以帮忙做很大一部分的类型安全检查工作了,这就避免了很多运行时的ClassCastException异常,程序员也无需记住各种对象的类型和担心类型匹配问题了。同时大部分情况下也不用做类型强制转换工作了。

类型通配符

当声明方法时,某个参数的类型是一个泛型类或泛型接口类型,但是在声明方法时,又不确定该泛型实际类型,就可用类型通配符。

showAnimal方法使用的就是类型通配符。Animal、Cat、MineCat都可以作为其传入的参数。

类型通配符上限extends

泛型上限通配符,传递的集合类型,只能是Cat或者Cat的子类类型

当传入的不是Cat或者Cat的子类时,就会报错。

限制:限制传入的类型,避免出错

编译时不确定添加的类型是否符合要求

类型通配符下限super

要求该泛型的类型,只能是实参类型,或实参类型的父类类型。

换成super后,当传入的不是Cat或者Cat的父类时,就会报错。

为什么super叫下限?因为要从指定的参数类型往上看;

extends为何叫下限?因为要从指定的参数类型往下看;

集合比较器为何要用super?因为确定了所有类型不可能超过已经规定的类型,保证安全地比较。

标签:总结,Java,通配符,Cat,类型,参数,泛型,super
From: https://www.cnblogs.com/xss9/p/16754741.html

相关文章

  • XX学Python·总结和推导式
    公共方法总结+:有{}的都不行,即字典,集合适用所有基础数据类型(intfloatbool),容器类型只有列表,元组,字符串两侧要是同种数据类型加法运算在容器类型中是拼接的意......
  • 20221004测试总结
    题目来自于:GeorgePlover.很水的一次,各位见谅.T1有两个年轻人题目分析统计序列中\(1\)的个数即可.点击查看代码#include<cmath>#include<cctype>#include<c......
  • 服务器跑代码总结
    服务器跑代码总结最近刚开始使用服务器跑一些深度学习模型,遇到了一些坑,导致代码运行效率很低,总结了一些应该注意的细节来提高准确率,特此记录。配环境换源等注意事项俗话......
  • 力扣166(java)-分数到小数(中等)
    题目:给定两个整数,分别表示分数的分子 numerator和分母denominator,以字符串形式返回小数。如果小数部分为循环小数,则将循环的部分括在括号内。如果存在多个答案,只需......
  • Java: Image Viewer Frame
     /***版权所有2022涂聚文有限公司*许可信息查看:*描述:*CoreJava,VolumeI:Fundamentals,TwelfthEditionbyCayS.Horstamnn*CoreJava,VolumeII:......
  • 【Java练习题】Java 程序的输出 | 第十三套(集合)
    ......
  • Grafana监控java应用以及vCenter的方法
    Grafana监控java应用以及vCenter的方法背景最开始弄过vCenter的监控.但是发现很多地方已经不合适了.今天看了下jmx监控java的应用.顺便监控了下vCenter.这里简单记......
  • javaSE基础-IO流
    IO流File类基本概念File类的一个对象,代表一个文件或一个文件目录(俗称文件夹)File类声明在java.io包下File类中涉及到关于文件或文件目录的创建、删除、重命名、修改时......
  • java学习前
    java后台运行机制编译指令:javaca.java-dx.classa.java--->x.class运行指令:javax.classx.class是都可以直接运行的机器指令,一份java代码可以再多平台使用,原......
  • Java SE 宋红康 days04-高级篇-Java8新特性
    Java8两大最重要的改变:Lambda表达式和StreamAPI集合讲的是数据,Stream讲的是计算!1.Lambda表达式Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以......