文档章节

Java基础之泛型

如比如比
 如比如比
发布于 2015/06/04 07:12
字数 606
阅读 121
收藏 8

泛型,宽泛的数据类型”

可以接受任意类型(类)的数据。


■泛型定义(类和接口)

类型参数必须是一个合法的标识符,习惯上使用单个大写字母,通常情况下,

K 表示键,

V 表示值,

E 表示元素,

N表示数字,

T 表示一般意义上的数据类型。

例:class Point<TX, TY>


■泛型变量

泛型类在实例化时必须指出具体的类型,也就是向类型参数。

例:

TX x;

TX y;


■泛型实例化

Point<Integer, Integer> p = new Point<Integer, Integer>();

类型擦除

Point p = new Point();


■泛型方法

class UTest {

    public <TX, TY> TX print(TX x, TY y)


public class Point<TX, TY> {

    public TX print(TX x, TY y) {


■泛型界限(上界)

public <TSB extends T1> T getMax(T array[]){

此处的”extends“表示的子类型,不等同于继承。

多重限制范围格式

<T extends A & B & C>

使用“&”分隔。且限制范围中之多有一个类。如果用一个类作为限定,它必须是限定列表中的第一个。


■泛型界限(下界)

<T super A>

注意:不能同时声明上界和下界。


■泛型通配符(?)

使用通配符(?)来代表“任意”未知类型,主要用于与泛型类型无关的定义:

public void print(Point<?, ?> p) {


最常用的就是Class<?>,因为Class<T>并没有依赖于T。

单独一个“?”的也叫无界通配符。

通配符的上界

? extends T 表示泛型的类型参数只能是 T 及其子类。

对于通配符的上界,有以下几点:

(假设给定的泛型类型为G,

(如List<E>中的List),两个具体的泛型参数X、Y,当中Y是X的子类)


G<? extends Y> 是 G<? extends X>的子类型

G<X> 是 G<? extends X>的子类型

G<?> 与 G<? extends Object>等同,如List<?> 与List<? extends Objext>等同。


传入的参数是未知的,所以java为了保护其类型一致,禁止向List<? extends X>添加任意对象,不过却可以添加 null,即list.add(null)是可行的。


通配符的下界

使用通配符(?)不但可以限制类型的上限,还可以限制下限。限制下限使用 super 关键字,例如 <? super TSB> 表示只能接受 TSB 及其父类。

List<Object>与List<?>并不等同,List<Object>是List<?>的子类。还有不能往List<?> list里添加任意对象,除了null。


© 著作权归作者所有

共有 人打赏支持
上一篇: 单精度浮点数
下一篇: 黑白棋
如比如比
粉丝 125
博文 178
码字总数 286951
作品 0
日本
程序员
私信 提问
提给程序员和开发者的 10 道 Java 泛型面试题

关于泛型的面试题在 Java面试中变得越来越常见,因为 Java 5问世已经有相当长的时间了,越来越多的应用已经迁移到Java 5上来了,并且几乎所有新的Java开发工作也都是在Tiger(Java 5的项目代号...

lwei
2013/10/18
13.2K
30
JAVA基础再回首(三十)——JAVA基础再回首完美结束,感概万千!

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m366917/article/details/52724939 JAVA基础再回首(三十)——JAVA基础再回首完美结束,感概万千! 经过了几...

Aduroidpc
2016/10/02
0
0
Kotlin 泛型 VS Java 泛型

建议先阅读我的上一篇文章 -- Java 泛型 和 Java 泛型一样,Kotlin 泛型也是 Kotlin 语言中较难理解的一个部分。Kotlin 泛型的本质也是参数化类型,并且提供了编译时强类型检查,实际上也是伪...

JohnnyShieh
2018/06/11
0
0
Java中的泛型 (上) - 基本概念和原理

下面我们来详细讨论Java中的泛型,虽然泛型的基本思维和概念是比较简单的,但它有一些非常令人费解的语法、细节、以及局限性,内容比较多。 所以我们分为三节,逐步来讨论,本节我们主要来介...

笔记12
2016/10/29
394
0
Cannot make a static reference to the non-stati...

今天碰到这样一些错误,Eclipse提示Cannot make a static reference to the non-static type T。代码如下: public class DAOFactory<D extends TemplateDAO<B>, B> {private static Map<Str......

开源中国驻成都办事处
2013/05/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

java框架学习日志-13(Mybatis基本概念和简单的例子)

在mybatis初次学习Mybatis的时候,遇到了很多问题,虽然阿里云的视频有教学,但是视频教学所使用的软件和我自己使用的软件不用,我自己用的数据库是oracle数据库,开发环境是idea。而且视频中...

白话
21分钟前
1
0
Java基础:String、StringBuffer和StringBuilder的区别

1 String String:字符串常量,字符串长度不可变。Java中String是immutable(不可变)的。 String类的包含如下定义: /** The value is used for character storage. */private final cha...

watermelon11
47分钟前
2
0
mogodb服务

部署MongoDB 官网: https://www.mongodb.com/download-center/community 创建mongo数据目录 mkdir /data/mongodb 二进制部署 wget -c https://fastdl.mongodb.org/linux/mongodb-linux-x8......

以谁为师
昨天
5
0
大神教你Debian GNU/Linux 9.7 “Stretch” Live和安装镜像开放下载

Debian项目团队于昨天发布了Debian GNU/Linux 9 "Stretch" 的第7个维护版本更新,重点修复了APT软件管理器中存在的安全漏洞。在敦促每位用户尽快升级系统的同时,Debian团队还发布了Debian ...

linux-tao
昨天
4
0
PHP 相关配置

1. php-fpm的pool 编辑php-fpm配置文件php-fpm.con vim /usr/local/php/etc/php-fpm.conf //在[global]部分增加以下内容 include = etc/php-fpm.d/*.conf # 相当与Nginx的虚拟主机文件 “vho......

Yue_Chen
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部