java 泛型基础

来源:互联网 发布:mysql tar.gz安装 编辑:程序博客网 时间:2024/06/05 16:49


1.  Java泛型编程是JDK1.5版本后引入的。泛型让编程人员能够使用类型抽象,通常用于集合里面。

    List list = new ArrayList();      list.add("CSDN_SEU_Cavin");      list.add(100);      for (int i = 0; i < list.size(); i++) {        String name = (String) list.get(i); //取出Integer时,运行时出现异常      System.out.println("name:" + name);      }  修改为  List<String> list = new ArrayList<String>();  

2. 泛型只在编译阶段有效

7.泛型的好处

(1)类型安全。 

通过知道使用泛型定义的变量的类型限制,编译器可以更有效地提高Java程序的类型安全。 

(2)消除强制类型转换。 

消除源代码中的许多强制类型转换。这使得代码更加可读,并且减少了出错机会。所有的强制转换都是自动和隐式的。

(3)提高性能。

8.泛型使用的注意事项

(1)泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。

(2)泛型的类型参数可以有多个。

(3)不能对确切的泛型类型使用instanceof操作。如下面的操作是非法的,编译时会出错。


----

K ——键,比如映射的键。

V ——值,比如 List 和 Set 的内容,或者 Map 中的值。

E ——异常类。

T ——泛型。

要定义泛型方法,只需将泛型参数列表置于返回值之前

  1.     public <T> void f(T x){  
  2.         System.out.println(x.getClass().getName());  
  3.     }
静态方法上的泛型:静态方法无法访问类上定义的泛型。如果静态方法操作的引用数据类型不确定的时候,必须要将泛型定义在方法上。


不能创建泛型数组。一般的解决方案是任何想要创建泛型数组的地方都使用ArrayList:


9、泛型通配符‘?’怎么用?

可以解决当具体类型不确定的时候,这个通配符就是 ?  ;当操作类型时,不需要使用类型的具体功能时,只使用Object类中的功能。那么可以用 ? 通配符来表未知类型。

10、泛型限定(上限和下限)的表达式是怎样的?

上限:?extends E:可以接收E类型或者E的子类型对象。

下限:?super E:可以接收E类型或者E的父类型对象。

上限什么时候用:往集合中添加元素时,既可以添加E类型对象,又可以添加E的子类型对象。为什么?因为取的时候,E类型既可以接收E类对象,又可以接收E的子类型对象。

 

下限什么时候用:当从集合中获取元素进行操作的时候,可以用当前元素的类型接收,也可以用当前元素的父类型接收。


12、什么时候用泛型?

当接口、类及方法中的操作的引用数据类型不确定的时候,以前用的Object来进行扩展的,现在可以用泛型来表示。这样可以避免强转的麻烦,而且将运行问题转移到的编译时期。

泛型的细节:

1)、泛型到底代表什么类型取决于调用者传入的类型,如果没传,默认是Object类型;

2)、使用带泛型的类创建对象时,等式两边指定的泛型必须一致;

    原因:编译器检查对象调用方法时只看变量,然而程序运行期间调用方法时就要考虑对象具体类型了;

3)、等式两边可以在任意一边使用泛型,在另一边不使用(考虑向后兼容);


13、Java类库中的泛型有那些?

所有的标准集合接口都是泛型化的—— Collection<V>、List<V>、Set<V> 和 Map<K,V>。类似地,集合接口的实现都是用相同类型参数泛型化的,所以HashMap<K,V> 实现 Map<K,V> 等。



0 0
原创粉丝点击