1.泛型:是一种把类型明确的工作推迟到创建对象或者调用方法的时候才去明确的特殊的类型。参数化类型,把类型当作参数一样的传递。
2.格式:<数据类型>此处的数据类型只能是引用类型。
3.好处:
-
把运行时期的问题提前到了编译期间
-
避免了强制类型转换
-
优化了程序设计,解决了黄色警告线
4.效果
没有加泛型:
加了泛型:
5.泛型的应用
定义在类上
格式:public class 类名 <泛型类型1…>
注意:泛型的类型必须是引用数据类型
定义在方法上
格式:public <泛型类型> 返回类型 方法名 (泛型类型)
方法可以接收任意类型
定义在类上
格式:public interface 接口名 <泛型类型>{}
举例
定义在类上
public class You<T> {
private T you;
public T getYou() {
return you;
}
public void setYou(T you) {
this.you = you;
}
泛型高级(通配符)
- ?:任意类型,如果没有明确,那么就是Object以及任意的Java类了
- ? extends E:向下限定,E及其子类
- ? super E:向上限定,E极其父类
举例:
public static void main(String[] args) {
// 泛型如果明确的写的时候,前后必须一致
Collection<Object> c1 = new ArrayList<Object>();
// Collection<Object> c2 = new ArrayList<Animal>();
// Collection<Object> c3 = new ArrayList<Dog>();
// Collection<Object> c4 = new ArrayList<Cat>();
// ?表示任意的类型都是可以的
Collection<?> c5 = new ArrayList<Object>();
Collection<?> c6 = new ArrayList<Animal>();
Collection<?> c7 = new ArrayList<Dog>();
Collection<?> c8 = new ArrayList<Cat>();
增强for
格式:for(元素类型变量 :数组或Collection集合){
使用加变量 ,该变量就是元素
}
跟普通for的区别
好处:简化了数组和集合的遍历
弊端:增强for不能有null
举例:
ArrayList<String> array = new ArrayList<String>();
// 创建并添加元素
array.add("李白");
array.add("韩信");
array.add("玄策");
// 增强for
for (String s : array) {
System.out.println(s);
}