Thinking in Java 第15章 泛型(15.1-15.4)
2016-07-11 08:30
232 查看
//声明:部分内容引自《Java编程思想(第四版)》机械工业出版社
– 泛型实现了参数化类型的概念,使代码可以应用于多种类型。
– 元组(数据传送对象或信使):将一组对象直接打包存储于其中的一个单一对象。这个容器对象允许读取其中元素,但是不允许向其中存放新的对象。
– 一般而言,一个生成器只定义一个方法,该方法用以产生新的对象。
– Java 中,基本类型无法作为泛型参数类型。但其具备了自动打包和自动拆包的功能,可以很方便地在基本类型和其相应的包装器类型之间进行转换。
例:
– 基本原则:无论何时都应尽量使用泛型方法。如果使用泛型方法可以取代将整个类泛型化,那么就应该只使用泛型方法。如果 static 方法需要使用泛型能力,就必须使其成为泛型方法。
– 当使用泛型类时,必须在创建对象的时候指定类型参数的值。在使用泛型方法的时候,通常不必指明参数类型,因为编译器会为我们找出具体的类型。这称为类型参数推断。如果调用方法时传入基本类型,自动打包机制会将基本类型的值包装为对应的对象。
– 类型推断只对赋值操作有效,其他时候并不起作用。如果将一个泛型方法调用的结果作为参数,传递给另一个方法,这时编译器并不会执行类型推断。因为编译器认为,调用泛型方法后,其返回值被赋给一个 Object 类型的变量。
– 在泛型方法中,可以显式地指明类型,但很少用。只有在编写非赋值语句时,才需要这种额外的说明。
– 泛型实现了参数化类型的概念,使代码可以应用于多种类型。
【简单泛型】
– 一个泛型容器可以持有某个基类以及它的导出类。因为多态与泛型不冲突。– 元组(数据传送对象或信使):将一组对象直接打包存储于其中的一个单一对象。这个容器对象允许读取其中元素,但是不允许向其中存放新的对象。
【泛型接口】
– 生成器:这是一种专门负责创建对象的类。是工厂方法设计模式的一种应用。当使用生成器创建新的对象时,它不需要任何参数,但工厂方法一般需要参数。– 一般而言,一个生成器只定义一个方法,该方法用以产生新的对象。
– 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对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- Python动态类型的学习---引用的理解
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序