Tuesday, January 5, 2016

Java 1.5 引入了泛型 generic

Java  版本的特性:

1  Java JDK1.5、1.6、1.7新特性整理




Java 1.5 引入了泛型 generic

<>  私人订制,  也是C++ 中的模板类型。

调高了代码的重用性和安全性


2  泛型的命名规范   

     为了更好地去理解泛型,我们也需要去理解java泛型的命名规范。为了与java关键字区别开来,java泛型参数只是使用一个大写字母来定义。各种常用泛型参数的意义如下:


  • E — Element,常用在java Collection里,如:           List<E>,Iterator<E>,Set<E>
  • K,V — Key,Value,代表Map的键值对
  • N — Number,数字
  • T — Type,类型,如String,Integer等等
  • S,U,V etc. - 2nd, 3rd, 4th 类型,和T的用法一样


    /**     *     * 第一、定义方法所用的泛型参数需要在修饰符之后添加,如上面的,public static <T>,如果有多个泛型参数,可如此定义<K,V>或者<T1,T2>。     *     * @param a     * @param c     */    public static <T> void fromArrayToCollection(T[] a,Collection<T> c){
        for (T t : a) {
            c.add(t);            //第二,不建议在泛型变量里添加其他类型,如下面的代码,将会引起编译错误(或隐含错误)//            c.add(new Object());        }
    }



2  泛型参数的界限   

    
上界和下界

 有时候,你会希望泛型类型只能是某一部分类型,比如操作数据的时候,你会希望是Number或其子类类型。这个想法其实就是给泛型参数添加一个界限

2.1 指定上界:    <T extends BoundingType>

当指定了上界的时候,所有 传入的数据类型都要是  指定类的子类,否则报错。问题,有一定的局限性。 相当与在这里 确定了最大的限度。

    接着引入下一个问题,如何为泛型参数添加多个限制范围,多重限制范围格式如下:
    <T extends A & B & C>
    一个泛型参数可以有多重限制范围,使用“&”分隔。且限制范围中之多有一个类。如果用一个类作为限定,它必须是限定列表中的第一个。举例如下:
Class A { /* ... */ }
interface B { /* ... */ }
interface C { /* ... */ }

class D <T extends A & B & C> { /* ... */ }

    如果BoundingType不是放在第一位,会产生编译异常:
class D <T extends B & A & C> { /* ... */ }  // 无法通过编译


2.2 指定下界:  <T super BoundingType>
 

3  泛型方法与泛参界限的整合

    如果说泛型方法是一个有用的工具,那泛参的界限就应该这个工具的灵魂,为这个工具添加了一些“行为准则。


















reference:



No comments:

Post a Comment