弊端:泛型是什么类型只能存储什么类型的数据。
public static void main(String[] args) {List<String> list = new ArrayList();// 规范了数据类型,只能放字符串!
list.add("小明");
list.add("小红");
//stringList.add(123);// 除了字符串以外的类型不能加,报错!
for (int i = 0; i < list.size(); i++) {
String s = list.get(i); // 不用再强转了
System.out.println(s);
}
}
在上述的实例中,我们只能添加String类型的数据,否则编译器会报错。
3.3泛型的定义与使用 泛型类定义格式:
修饰符 class 类名<泛型变量>{
}
// 注:泛型变量建议使用E、T、K、V
例如:
public class Box<T> {private T t;
public void add(T t) {
this.t = t;
}
public T get() {
return t;
}
参考示例:
注:在创建对象时确定泛型的类型
泛型方法
定义格式:
修饰符 <泛型变量> 返回值的类型 方法名称(形参列表){//方法体
}
注:含有泛型的方法,在调用的时候确定泛型的数据类型
传递什么类型的参数,泛型就是什么类型
参考示例:
泛型接口定义格式:
public interface 接口名<泛型类型> {}
使用方式1:定义接口的实现类,实现接口,并且指定接口的泛型
使用方式2:接口使用什么泛型,实现类就使用什么泛型,类跟着接口走。
就相当于定义了一个含有泛型的类,创建对象的时候确定泛型的类型。
下图接口同上图接口