泛型-----Generic foreach增强的for语句

1.泛型的引入

    泛型是JDK5.0增加的最重要的Java语言特性,使用泛型可以解决的问题:

        程序针对不同的类有相同的方法,但是这些类之间不一定有继承关系。为了保证在一个集合中保存的元素全是某一种类型,我们可以在集合的定义时就把它规范清楚。普通的集合中添加元素时候,我们不能保证添加的元素是同在一种类型的元素;另外,在取出元素的时候,要进行强制类型转换。为了解决这两个问题,所以引入了泛型。

2.加入泛型

    加入泛型就是对集合中放入的元素进行约束,在新的写法中,一对尖括号(<>)表名了元素的类型。当加入元素时,Java会对元素中的类型检查,不是尖括号内的类型时编译不通过。在我们取出的元素,编译器可以知道该元素的类型就是我们所约束的类型,此时,我们不用强制转换类型

3.泛型的分类(能看懂API即可,)

    (1)泛型类:public class Test <AA>{}

        普通类后面加上尖括号后就变成了一个泛型类。<>内容可以任意写:AA 只是一个占位符,它代表一种数据类型。现在这个数据类型还没确定,在创建这个类具体对象的时候就会确定了

    (2)泛型方法:public <BB> void b(BB b){} 

        如上所示,BB占位符,代表一种数据类型,但是数据类型不确定,在调用该方法的时候确定。可以说方法泛型解决了方法参数个数相同时方法的重载。

        注意:static修饰的泛型方法时,b方法可以在创建对象之前调用,这时不需要BB的类型确定

                   调用c方法的时候,可能没有创建对象,那么AA就是不确定的。



   可变参数的泛型方法: 可变参数...当作数组来处理。解决了参数不同(类型不同,顺序不同,个数不同的)重载。

    可变参数:适用于参数个数不确定,类型确定的情况,java把可变参数当做数组处理。可变参数必须时最后一项。...位于变量类型和变量名之间,前后有无空格都可以。

        

     (3)泛型接口:public A interface <AA> {}

        在普通的接口后加泛型,变成泛型接口


4.泛型的高级应用

        1.泛型的上限,传入的内容可以时Person,也可以是Student.即子类和父类


foreach 语句

        在JDK1.5中,对for语句进行了增强,它在for语句中使用一个类名,一个变量名,一个冒号以及一个集合名来代表对集合中对象的列举。例如:

for(Photo photo : album){

    System.out.println(photp.toString);

}

注意:集合的变量名还可以是数组名。