Java泛型: 主要知识点总结
Java泛型:主要知识点总结
1 泛型的好处
- 解决元素存储的安全性问题。
- 解决获取数据元素时,需要类型强制转换的问题。
- Java泛型可以保证如果程序在编译时没有发出警告,运行。时就不会产生
ClassCastException异常。同时,代码更加简洁、健壮。

2 自定义泛型结构
2.1 泛型类和泛型接口
interface List<T> 和 class GenTest<K,V>,其中,T,K,V不代表值,而是表示类型。这里使用任意字母都可以。常用T表示,是Type的缩写。

2.2 泛型方法
泛型方法的格式:[访问权限] <泛型> 返回类型 方法名([泛型标识 参数名称]) 抛出的异常

2.3 泛型的实例化
一定要在类名后面指定类型参数的值(类型)。如:List<String> strList = new ArrayList<String>(),Iterator<Customer> iterator = customers.iterator()。

注意:
- T只能是类,不能用基本数据类型填充。但可以使用包装类填充。
2.4 泛型通配符
2.4.1 通配符:?
- 使用类型通配符的实例:
List<?>,Map<?,?>。List<?>是List<String>、List<Object>等各种泛型List的父类。 - 读取
List<?>的对象list中的元素时,永远是安全的,因为不管list的真实类型是什么,它包含的都是Object。- 我们可以调用get()方法并使用其返回值。返回值是一个未知的类型,但是我们知道,它总是一个Object。
- 写入
list中的元素时,不行。因为我们不知道其中的元素类型,我们不能向其中添加对象。唯一的例外是null,它是所有类型的成员。- 将任意元素加入到其中不是类型安全的:
Collection<?> c = new ArrayList<String>();执行c.add(new Object())会发生编译时错误。因为我们不知道c的元素类型,故传给add的任何参数都必须是一个未知类型的子类。因为不知道那是什么类型,所以无法传任何东西进去。
- 将任意元素加入到其中不是类型安全的:
- 使用示例:

- 注意事项:
- 注意点1:编译错误:不能用在泛型方法声明上,返回值类型前面<>不能使用?

- 注意点2:编译错误:不能用在泛型类的声明上

- 注意点3:编译错误:不能用在创建对象上,右边属于创建集合对象

- 注意点1:编译错误:不能用在泛型方法声明上,返回值类型前面<>不能使用?
2.4.2 通配符上限和下限:
- 上限extends:使用时指定的类型必须是继承某个类,或者实现某个接口,即<=。
- 使用示例:
<? extends Number>, (无穷小 ,Number],只允许泛型为Number及Number子类的引用调用。<? extends Comparable>只允许泛型为实现Comparable接口的实现类的引用调用。
- 使用示例:
- 下限super:使用时指定的类型不能小于操作的类,即>=。
- 使用示例:
<? super Number>[Number, 无穷大)只允许泛型为Number及Number父类的引用调用。
- 使用示例:
3 泛型使用的注意点
- 泛型类可能有多个参数,此时应将多个参数一起放在尖括号内。比如:
<E1,E2,E3>。 - 泛型类的构造器如下:
public GenericClass(){}。而下面是错误的:public GenericClass<E>(){}。 - 实例化后,操作原来泛型位置的结构必须与指定的泛型类型一致。
- 泛型不同的引用不能相互赋值。例如:
ArrayList<String>和ArrayList<Integer>是两种类型,相互赋值会导致报错。 - 泛型如果不指定,将被擦除,泛型对应的类型均按照
Object处理,但不等价于Object。 - 如果泛型结构是一个接口或抽象类,则不可创建泛型类的对象。
- 泛型的指定中不能使用基本数据类型,可以使用包装类换。
- 在类/接口上声明的泛型,在本类或本接口中即代表某种类型,可以作为非静态属性的类型、非静态方法的参数类型、非静态方法的返回值类型。但在静态方法中不能使用类的泛型。
- 异常类不能是泛型的。(继承某个异常类的子类不能声明为泛型类)

- 父类有泛型,子类可以选择保留泛型也可以选择指定泛型类型。

图片文件夹 images/images0
Java泛型: 主要知识点总结的更多相关文章
- 牛客网Java刷题知识点之泛型概念的提出、什么是泛型、泛型在集合中的应用、泛型类、泛型方法、泛型接口、泛型限定上限、泛型限定下限、 什么时候使用上限?泛型限定通配符的体现
不多说,直接上干货! 先来看个泛型概念提出的背景的例子. GenericDemo.java package zhouls.bigdata.DataFeatureSelection; import ja ...
- Java泛型知识点全方位总结
前言 我一直认为泛型是编程语言设计中一个非常基本和重要的概念.Java中的泛型是什么?他们为什么在那里?他们是如何发展的?在学习基础知识时,对仿制药的透彻理解是非常重要的.因此,我阅读了<Jav ...
- java泛型操作复习,以及讲解在android中使用的场景
android使用泛型的地方很多,比如集成自BaseAdapter实现封装的Adapter,对常用操作进行封装,但是需要对传进来的数据进行处理,此时就使用到泛型,示例如下: public abstra ...
- Java泛型概述
泛型是Java中一个非常重要的知识点,在Java集合类框架中泛型被广泛应用.本文我们将从零开始来看一下Java泛型的设计,将会涉及到通配符处理,以及让人苦恼的类型擦除. 泛型基础 泛型类 我们首先定义 ...
- Java研发工程师知识点总结
Java研发工程师知识点总结 最近一次更新2017年12月08日 大纲 一.Java基础(语言.集合框架.OOP.设计模式等) 二.Java高级(JavaEE.框架.服务器.工具等) 三.多线程和并发 ...
- Java泛型详解(转)
文章转自 importNew:Java 泛型详解 引言 泛型是Java中一个非常重要的知识点,在Java集合类框架中泛型被广泛应用.本文我们将从零开始来看一下Java泛型的设计,将会涉及到通配符处理 ...
- 第11讲-Java泛型和文件操作
1.知识点 1.1.课程回顾 1.2.本章重点 1.2.1.泛型 1.2.2.文件操作 2.具体内容 2.1.Java泛型 2.1.1.为什么需要泛型 我们发现在List中,底层是Object[ ]数 ...
- Java基础系列二:Java泛型
该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 一.泛型概述 1.定 ...
- Java 泛型、通配符? 解惑
Java 泛型通配符?解惑 分类: JAVA 2014-05-05 15:53 2799人阅读 评论(4) 收藏 举报 泛型通配符上界下界无界 目录(?)[+] 转自:http://www.linux ...
- Java——Java泛型
该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 一.泛型概述 1.定 ...
随机推荐
- 在unity编辑器中,导出/保存文件,使用EditorUtility.SaveFilePanel,代替运行时的方法。
在项目中(运行时),已经有个功能是导出文件到本地磁盘,使用的方法是常见的DllImport("Comdlg32.dll")并进行封装.详情可参考:https://github.co ...
- 中国人民公安大学 Chinese people’ public security university 网络对抗技术 实验报告4
中国人民公安大学 Chinese people' public security university 网络对抗技术 实验报告 实验四 恶意代码技术 学生姓名 陈禹 年级 2018 区队 ...
- C#找出可用TCP端口,仅两行代码就搞定
var start = 2222; var ps = IPGlobalProperties.GetIPGlobalProperties().GetActiveTcpListeners().Select ...
- 生成Funnel漏斗图
-----------第一步----------- import jsonlist_p = [{"action":"浏览商品","PV":5 ...
- jmeter性能测试学习1_配置oracl jdbc连接
1.导入orcle驱动的jar包 2.添加配置元件选择 JDBC连接配置 3.添加取样器 JDBCrequest 4.添加观察树,运行 配好密码 OK
- mysql explain 优化
explain的使用 使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析你的查询语句或是结构的性能瓶颈.在select语句之前增加explain关键字,Mysql会在查询上设置一个标记,执行查 ...
- Sql Server函数全解
--系统函数 create database sample_db; use sample_db; create table student ( i_sid int primary key identi ...
- CentOS7 安裝DHCP服務並啟用DHCP failover
1. 安裝dhcp服務 yum install -y dhcp 2. host1 vi /etc/dhcp/dhcpd.failover failover peer "dhcpfailove ...
- 深入理解css 笔记(9)
模块化 CSS 是指把页面分割成不同的组成部分,这些组成部分可以在多种上下文中重复使用,并且互相之间没有依赖关系.最终目的是,当我们修改其中一部分 css 时,不会对其他部分产生意料之外的影响. ...
- 第一章 excel与数据格式
part1 数据缘何而来 excel中常见的文件格式有xls与xlsx,推荐后者(空间小.容量大.速度快等特点) 单个excel文件为工作簿,其下包含工作表sheet(最多255),sheet中的每个 ...