r java 泛型_Java 泛型
规则和限制
1、泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。
2、同一种泛型可以对应多个版本(因为参数类型是不确定的),不同版本的泛型类实例是不兼容的。
3、泛型的类型参数可以有多个。
4、泛型的参数类型可以使用extends语句,例如。习惯上称为“有界类型”。
5、泛型的参数类型还可以是通配符类型。例如Class> classType = Class.forName("java.lang.String")。
限制泛型
我们一般是这样定义泛型的:class Generics,实际上这里的限定类型相当于Object,这和“Object泛型”实质是一样的。什么是限制比如我们要限制T为集合接口类型。只需要这么做:class Generics,这样类中的泛型T只能是Collection接口的实现类,传入非Collection接口编译会出错。
注意:这里的限定使用关键字extends,后面可以是类也可以是接口。但这里的extends已经不是继承的含义了,应该理解为T类型是实现Collection接口的类型,或者T是继承了XX类的类型。
public class CollectionGen {
private T t;
public CollectionGen(T t) {
this.t = t;
}
public T getT() {
return t;
}
public void setT(T t) {
this.t = t;
}
public static void main(String args[]) {
CollectionGen genList = null;
genList = new CollectionGen(new ArrayList());
//以下代码不能通过编译
// CollectionGen genCollention = null;
// genCollention=new CollectionGen(new ArrayList());
System.out.println("可以编译通过并运行!");
}
}
上面的代码是可以编译通过并成功运行的。但是打开注释掉的两行就出错了,因为这么定义类型的时候,就限定了构造此类实例的时候T是确定的一个类型,这个类型实现了Collection接口。简单一句话就是:上面这种方式,定义跟实例化的类型必须完全一致。
通配符泛型
为了解决类型被限制死了不能动态根据实例来确定的缺点,引入了“通配符泛型”,针对上面的例子,使用通配泛型格式为 extends Collection>,“?”代表未知类型,这个类型是实现Collection接口。那么上面实现的方式可以写为:
public static void main(String args[]) {
Generics genList = null;
genList = new Generics(new ArrayList());
//以下代码可以通过编译
Generics extends Collection> genCollention = null;
genCollention=new Generics(new ArrayList());
System.out.println("可以编译通过并运行!");
}
1、如果只指定了>,而没有extends,则默认是允许Object及其下的任何Java类了。也就是任意类。
2、通配符泛型不单可以向下限制,如 extends Collection>,还可以向上限制,如 super Double>,表示类型只能接受Double及其上层父类类型,如Number、Object类型的实例。
3、泛型类定义可以有多个泛型参数,中间用逗号隔开,还可以定义泛型接口,泛型方法。这些都与泛型类中泛型的使用规则类似。
多接口限制
虽然Java泛型简单的用 extends 统一的表示了原有的 extends 和 implements 的概念,但仍要遵循应用的体系,Java 只能继承一个类,但可以实现多个接口,所以你的某个类型需要用 extends 限定,且有多种类型的时候,只能存在一个是类,并且类写在第一位,接口列在后面,也就是:
这里的例子仅演示了泛型方法的类型限定,对于泛型类中类型参数的限制用完全一样的规则,只是加在类声明的头部,如:
public class Demo{
//T类型就可以用Comparable声明的方法和Seriablizable所拥有的特性了
}
r java 泛型_Java 泛型相关推荐
- java泛型的泛型_Java 泛型总结(一):基本用法与类型擦除
简介 Java 在 1.5 引入了泛型机制,泛型本质是参数化类型,也就是说变量的类型是一个参数,在使用时再指定为具体类型.泛型可以用于类.接口.方法,通过使用泛型可以使代码更简单.安全.然而 Java ...
- 什么是java泛型_java泛型背后是什么
这一节主要讲的内容是java中泛型的应用,通过该篇让大家更好地理解泛型,以及面试中经常说的泛型类型擦除是什么概念,今天就带着这几个问题一起看下: 举一个简单的例子: image.png 这里可以看出来 ...
- java模型给泛型_java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一
对java的泛型特性的了解仅限于表面的浅浅一层,直到在学习设计模式时发现有不了解的用法,才想起详细的记录一下. 1. 概述 泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应 ...
- java 泛型嵌套泛型_Java泛型简介–第6部分
java 泛型嵌套泛型 这是关于泛型的介绍性讨论的延续, 此处的先前部分可以在此处找到. 在上一篇文章中,我们讨论了关于类型参数的递归边界. 我们看到了递归绑定如何帮助我们重用了车辆比较逻辑. 在该文 ...
- java 获取泛型_Java泛型 | Jackson TypeReference获取泛型类型信息
前言 Jackson是一个比较流行的Json序列化和反序列化框架.本文以Jackson为例介绍TypeReference实现涉及泛型的反序列化,及TypeReference的实现原理.对于获取泛型类型 ...
- java泛型类指定多个泛型_Java泛型中的多态
java泛型类指定多个泛型 从作为Java程序员的早期开始,我们都知道如何实例化和使用Collection对象. 实例化为具体类的List接口将如下所示. List myArrayList = new ...
- java怎么使用泛型_java泛型 7 泛型的基本介绍和使用
现在开始深入学习Java的泛型了,以前一直只是在集合中简单的使用泛型,根本就不明白泛型的原理和作用.泛型在java中,是一个十分重要的特性,所以要好好的研究下. 一.泛型的基本概念 泛型的定义:泛型是 ...
- java 高级泛型_java泛型的高级应用
展开全部 在上面的例子中,由于没有限制class GenericsFoo类型持有者T的范围,实际上这里32313133353236313431303231363533e59b9ee7ad9431333 ...
- 泛型 java 总结_JAVA泛型总结
泛型是JDK1.5的新东西,总结了一下,以后备忘, 泛型也叫generics,泛型分泛型方法和泛型类,两种定义方式,泛型还有上界下界的说法, 先看看什么叫泛型方法和泛型类,一下是网上的一个解释,个人觉 ...
最新文章
- LInux初始学习篇:基本命令使用
- python 小例子 源码 莫凡_100 个 Python 小例子(一)
- Spring Aop之Advisor解析
- 一年月份大小月口诀_怎么看自己的日柱 公式 推算口诀 最简便计算方法
- matlab 加入高频噪声_Wavelet Integrated CNNs提高图像分类的噪声鲁棒性
- C语言 extern
- android方法的初始化,Android小技巧:自动初始化Library
- fiddler限速/弱网模拟
- aix系统怎么开启ftp服务器,liunx和aix 系统开启ftp服务
- Leetcode(二):Add Two Numbers
- [转]关于管理的经典故事(员工激励)
- Js跑马灯效果 在Vue中使用
- Struts2 验证码图片实例
- JUnit 4 vs JUnit 5
- 常用的富文本编辑器插件
- CodeMirror用户手册
- 元学习入门必备:MAML(背景+论文解读+代码分析)
- [黑客入门]花无涯新手入门教程笔记
- 卡诺模型案例分析_需求分析神器 | 如何用卡诺模型分析需求
- 推荐系统之itemCF