1,jdk1.5以后出现的机制generic
2,泛型的书写格式<类型>
3,泛型出现的原因或者好处:
(1)提高了程序的安全性
(2)将运行期遇到的问题转移到了编译期
(3)省去了类型转换的麻烦.
注意:
泛型是在编译的时候,做的事情.真正程序执行的时候,可以没有泛型信息.(也就是说, .class中没有泛型 )
例如:
import java.util.ArrayList;
import java.util.ListIterator;
public class GenericDemo {
public static void main(String[] args){
ArrayList a1=new ArrayList();
a1.add(“jerry”);
a1.add(“susan”);
// a1.add(10);//编译错误,此时已经将ArrayList集合规范了,里面的
// 元素只能放String类型的元素
//遍历集合
/*此时请注意,集合是泛型,迭代器也是泛型,所以给ListIterator添加泛型<String>
* */
ListIterator <String>listIterator=a1.listIterator();
while (listIterator.hasNext()){
//泛型情况下,不再需要乡下类型转换
String str=listIterator.next();
}
}
}
4,泛型的应用:
A:泛型类
把泛型定义在类上
格式:public class 类名 <泛型类型1,…>
注意:泛型类型必须是引用类型
B:泛型方法
把泛型定义在方法上
格式:public <泛型类型> 返回类型 方法名(泛型类型)
C:泛型接口
把泛型定义在接口上
格式:public interface 接口名<泛型类型1,…>
注意:泛型接口,在被子类实现的时候,需要提供泛型类型
5,泛型高级(通配符)
A:任意类型
如果没有明确,那么就用Object以及任意的java类了
副作用:不能往里面存或者更新,只能往外取
B: ? extends E
向下限定,E及其子类
副作用:不能往里或者取,只能往外更新
C: ? super E
向上限定:E及其父类
副作用:不影响往里存,但往外取只能放在Object对象里