您的位置:首页 > 编程语言 > Java开发

Thinking in Java 第15章 泛型(15.1-15.4)

2016-07-11 08:30 232 查看
//声明:部分内容引自《Java编程思想(第四版)》机械工业出版社

– 泛型实现了参数化类型的概念,使代码可以应用于多种类型。

【简单泛型】

– 一个泛型容器可以持有某个基类以及它的导出类。因为多态与泛型不冲突。

– 元组(数据传送对象或信使):将一组对象直接打包存储于其中的一个单一对象。这个容器对象允许读取其中元素,但是不允许向其中存放新的对象。

【泛型接口】

– 生成器:这是一种专门负责创建对象的类。是工厂方法设计模式的一种应用。当使用生成器创建新的对象时,它不需要任何参数,但工厂方法一般需要参数。

– 一般而言,一个生成器只定义一个方法,该方法用以产生新的对象。

– Java 中,基本类型无法作为泛型参数类型。但其具备了自动打包和自动拆包的功能,可以很方便地在基本类型和其相应的包装器类型之间进行转换。

例:

package generics;//: generics/Fibonacci.java
// Generate a Fibonacci sequence.
import net.mindview.util.*;

public class Fibonacci implements Generator<Integer> {
private int count = 0;
public Integer next() { return fib(count++); }
private int fib(int n) {
if(n < 2) return 1;
return fib(n-2) + fib(n-1);
}
public static void main(String[] args) {
Fibonacci gen = new Fibonacci();
for(int i = 0; i < 18; i++)
System.out.print(gen.next() + " ");
}
} /* Output:
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584
*///:~


【泛型方法】

– 泛型方法使得该方法能够独立于类而产生变化。

– 基本原则:无论何时都应尽量使用泛型方法。如果使用泛型方法可以取代将整个类泛型化,那么就应该只使用泛型方法。如果 static 方法需要使用泛型能力,就必须使其成为泛型方法。

– 当使用泛型类时,必须在创建对象的时候指定类型参数的值。在使用泛型方法的时候,通常不必指明参数类型,因为编译器会为我们找出具体的类型。这称为类型参数推断。如果调用方法时传入基本类型,自动打包机制会将基本类型的值包装为对应的对象。

– 类型推断只对赋值操作有效,其他时候并不起作用。如果将一个泛型方法调用的结果作为参数,传递给另一个方法,这时编译器并不会执行类型推断。因为编译器认为,调用泛型方法后,其返回值被赋给一个 Object 类型的变量。

– 在泛型方法中,可以显式地指明类型,但很少用。只有在编写非赋值语句时,才需要这种额外的说明。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 泛型 对象 多态