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>
当指定了上界的时候,所有 传入的数据类型都要是 指定类的子类,否则报错。问题,有一定的局限性。 相当与在这里 确定了最大的限度。
Class A { /* ... */ } interface B { /* ... */ } interface C { /* ... */ } class D <T extends A & B & C> { /* ... */ }
class D <T extends B & A & C> { /* ... */ } // 无法通过编译
2.2 指定下界: <T super BoundingType>
3 泛型方法与泛参界限的整合
如果说泛型方法是一个有用的工具,那泛参的界限就应该这个工具的灵魂,为这个工具添加了一些“行为准则。
reference:
No comments:
Post a Comment