希望能得到高人的指点,不胜感激
1,引入泛型的java版本
泛型是在java 5.0及更高的版本中出现的特性
2,什么是泛型
泛型是java语言扩展到一种类型,这种类型已参数化的方式来定义类
3,引入泛型的动机(泛型的作用)
1)类型检查(即:类型安全)
由于在定义泛型时候,就已经限制了参数类型,所以编译器就能通过泛型的参数类型来检查 引用变量在使用该泛型时,对类型进行检查,如何把符合就会在编译时报错。这样把运行时可能出现的类型错误,在编译期间就可以检查出来了
2)消除了代码编写时的强制类型转换
由于参数化类型的限制,所以,我们不需要进行强制类型的转换,注意:这里是我们的代码中不需要强制类型转换,按照参考文献的说明,实质在编译器编译的过程中,将强制转换的代码生成在二进制代码中
举个例子:
List<Integer> list = new ArrayList<Integer>();
list.add(new Integer(1));
Integer a = list.get(0); // 注意这行代码,如果不是用泛型,这应该是:Integer a = (Inteager) map.get(0);
这里假设要能在list使用其他类型时,就用通配符?来解决
如何来将一个方法定义成一个可以接受不同的泛型类型呢?
如:
可以将List<Integer>,List<String>的类型变量传给保护List<?>形式参数的方法
我觉得这里可以畸形的理解成泛型的继承关系
3)性能的提高
关于性能的提高,这个我确实还没完全理解到?忘高人指点
4,泛型的运行机制
这点我还不明白
5,如何使用泛型
1,泛型的自定义
泛型的自定义必须是一个或者多个形式参数的形式来定义
如类库中的Map:
public interface Map<K,V>
{
public void put(K key, V value);
public V get(K key);
}
泛型的声明和实例化时候,就应该明确指明K,V的类型,这样编译器就能在编译期间对类型参数具体的绑定
如:
Map<Integer,String> map = new HashMap<Integer, String>();
附:
形式参数的推荐命名方式
- K —— 键,比如映射的键。
- V —— 值,比如
List
和Set
的内容,或者Map
中的值。 - E —— 异常类。
- T —— 泛型。
6,何时使用泛型
在什么时候恰当的使用泛型呢?这点我还不明白