第9章 泛型

来源:互联网 发布:淘宝鞋子男款休闲鞋 编辑:程序博客网 时间:2024/05/16 05:41

9.1.2 使用泛型

java1.5以后引入了参数类型,允许程序在创建聚合时,指定集合元素的类型,java的参数化类型被称为泛型

9.1.3泛型的“菱形”语法

java 7 后面菱形中的类型可以省略。

 

9.2 深入泛型

所谓泛型,就是允许定义类。接口、方法时使用类型形参,这个类型形参将在声明变量、创建对象、调用方法时动态的指定

当创建带泛型的声明的类时,为该类定义构造器时,构造器的名还是远啦的名,不要增加泛型声明

包含泛型声明的类型可以在定义变量,创建对象时传入一个类型声明,从而可以动态的生成无数个逻辑上的子类,但种子类物理上并不存在

9.2.2 从泛型类派生子类

当创建了带泛型的声明的接口,父类之后,可以为该接口创建实现类或从该父类派生子类,当使用这些接口,父类时不能再包含类型形参

定义方法时可以声明形参,调用方法时必须为这些数据形参传入实际的数据,与此类似的是,定义类 接口 方法时都可以声明类型参数,但是使用类接口方法时必须为形参传入实际的类型

9.2.3 并不存在泛型类

静态方法,静态初始化块或者静态变量的声明和初始化中不允许使用类型参数

由于系统不会生成泛型类,所有instanceof运算符后不能使用泛型类

 

如果Foo Bar的子类型(子接口,子类)而G是具有泛型声明的类或者接口,那么G<Foo>并不是G<Bar>的子类

如果Foo Bar的子类型(子接口,子类)那么Foo[]依然是Bar[]的子类型

 

java泛型设计的原则是 只要在编译时没有出现警告,运行时就不会出现造型异常

9.3.1使用类型通配符

为了表示各种泛型List的父类,可以使用类型通配符,类型通配符是一个问号(?),将一个问号作为类型实参参数List集合,写作List<?>,它的元素类型可以匹配任何类型

 

但是这种带通配符的List,仅表示它是各种泛型List的父类,并不能把元素加入到其中。

 

9.3.2 设置类型通配符的上限

List<? extends Shape> 是受限通配符的例子,此处的问号(?)代表一个未知的类型,此处的未知类型一定是Shape的子类也可以是Shape,因此可以把shape称为这个通配符的上限

9.3.3设定参数类型的上限

设置类型形参上限,用于表示传给该类型的实际类型要么是该上限类型,要么是给上限类型的子类

与类同时继承父类、实现接口类似的是,为类型形参指定多个上限时,所有的接口上限必须位于类上限之后

9.4 泛型方法

9.4.1 定义泛型方法

修饰符 <T , S> 返回值类型 方法名(形参列表){

方法体。。。

}

 

大部分时候泛型方法都可以代替类型通配符

 

9.4.2 泛型方法和通配符的区别

类型形参T 产生的唯一效果是可以在不同的调用点传入不同的实际类型,通配符是被设计来支持灵活的子类化的

泛型方法允许类型参数被用来表示方法的一个或多个参数之间的类型依赖关系,或者方法返回值与参数之间的类型依赖关系,如果没有这种依赖关系就没有必要使用泛型方法

 

9.4.3 泛型构造器

java允许在构造器签名中声明类型形参 这就是所谓的泛型构造器

一旦定义了泛型构造器,不仅可以染java根据数据参数类型来推断类型参数的类型,而且可以染程序员也可以显示地为构造器类型参数指定实际的类型

9.4.4设定通配符下限

<? super Type>

 

0 0
原创粉丝点击