泛型:是一种把类型明确的工作推迟到创建对象,或者调用方法的时候才去明确的特殊的类型。
好处:(1): 把运行时期的问题提前到了编译期间
(2): 避免了强制类型转换
(3):优化了程序设计,解决了黄色警告线
注意:泛型只在编译期有效 但在运行期就擦除了。
把泛型定义在类上:
定义格式:public class 类名 <泛型类型>
注意事项:泛型类型必须是引用类型。
把泛型定义在方法上:
定义格式: public <泛型类型> 返回类型 方法名(泛型类型 变量名)
把泛型定义在类上:
定义格式:public interface 接口名<泛型类型>
泛型接口的子类:第一种情况:定义子类是已经明确数据类型
public class InterImpl implements Inter<String> {
@Override
public void show(String k) {
System.out.println(k);
}
第二种情况:就是在定义子类的时候我们还不知道到底使用什么数据类型.这个时候我们就需要将这个子类也定义
成泛型。
public class InterImpl<T> implements Inter<T> {
@Override
public void show(T t) {
System.out.println(t);
}
}
泛型通配符:
<?>:任意类型。
? extends E:向下限定,E及其子类。
? super E:向上限定,E及其父类。
增强的for循环:
格式:for(元素数据类型 变量:数组或集合){
使用变量
}
例:
for(Student S:list){
System.out.println(S);
}