第6章 泛型

Posted code1992

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第6章 泛型相关的知识,希望对你有一定的参考价值。

泛型可以创建独立于被包含类型的类和方法

性能、类型的安全性、二进制代码重用、代码的拓展、命名约定

6.1.1 性能

var list = new ArrayList();
list.Add(4);  //装箱
int il = (int) list [0]; //拆箱

var list = new List<int>();
list.Add(44); //不用装箱
int il = list[0]; //不用拆箱

ArrayList类存储对象,把对象作为参数,需要大量装箱和拆箱。

List<T>类不使用对象,而是在使用时定义类型,定义的类型在JIT编译器动态生成的类中使用,不再进行装箱和拆箱操作

 

6.1.2 类型安全

ArrayList可以Add任意类型,foreach遍历int类型时遇到不是int就会异常。

List<T>泛型类型T定义了允许使用的类型

 

6.1.3 二进制代码的重用

泛型类型可以定义一次,可以用许多不用的类型实例化

var list = new List<int>();
var stringList = new List<string>();
var myClassList = new List<MyClass>();

 

6.1.4 代码的拓展

在不同的特定类型实例化泛型时,会创建多少代码?因为泛型类的定义会放在程序集中,所以用特定类型实例化泛型类不会在IL代码中赋值这些类。但是,在JIT编译器把泛型类编译为本地代码时,会给每个值类型创建一个新类。引用类型共享同一个本地类的所有相同的实现代码。这是因为引用类型在实例化的泛型类中只需要4个字节的内存地址(32位系统),就可以引用一个引用类型。值类型包含在实例化的泛型类的内存中,同时因为每个值类型对内存的要求都不通,所以要为每个值类型实例化一个新类。

(看不懂)

 

6.1.5 命名约定

泛型类型的名称用字母T作为前缀 public class List<T> () 

如果没有特殊的要求,泛型类型允许用任意类替代,且只使用了一个泛型类型,就可以用字符T作为泛型类型的名称 public class LinkedList<T> 

如果泛型类型有特定的要求(例如,它必须实现一个接口或派生自基类,或者使用了两个或多个泛型类型),就应该给泛型类型使用描述性的名称

public class SortedList<TKey, TValue>()

 

6.2 创建泛型类

每个处理对象类型的类都可以有泛型实现方式,这样有利于消除类型强制转换操作

 

6.3 泛型类的功能

 

以上是关于第6章 泛型的主要内容,如果未能解决你的问题,请参考以下文章

第2章 增强for&泛型

编写高质量代码:改善Java程序的151个建议(第7章:泛型和反射___建议106~109)

编写高质量代码:改善Java程序的151个建议(第7章:泛型和反射___建议98~101)

第15章 泛型

[读书笔记]Java编程思想

《疯狂java讲义》读后感