java之泛型

帅比萌擦擦* 提交于 2019-12-21 15:18:44

优点

泛型能够让我们在编译时而不是在运行时检测出错误

形式泛型类型,E、T
替换泛型类型成为泛型实例化

eg:

//定义一个只能存放String的数组列表
ArrayList<String> list = new ArrayList<>();
list.add("red");//只能添加字符串
list.add(123);//添加其他参数类型会在编译时报错,Java会把123自动包装为new Integer(123)->自动装箱(autoboxing)

注意事项

1、泛型类型必须是引用类型,不能用8大基本类型来泛型实例化(byte、short、int、long、char、boolean、float、double)
2、无须类型转换就可以从一个已指定元素类型的新型表中获取一个值。编译器已经从泛型那知道这个元素的类型了。

ArrayList<String> list = new ArrayList<>();
list.add("red");
String s = list.get(0);//no casting is needed

定义泛型类和接口

可以为类或者接口定义泛型,当实用类来创建对象,或者使用类或者接口来声明引用变量时,必须指定具体的类型

注意事项

1、泛型类可有有多个参数,用都好分隔开,例如<E1,E2,E3>
2、可以定义一个类或接口作为泛型类或者泛型接口的子类型
3、将泛型类型放在类名之后

public class String implements Comparable<String>

定义泛型方法

1、可以将静态方法定义为泛型类型
2、将泛型类型放在方法返回值之前

public static <E> void print(E[] list){
}
//调用方法时的两种方法
classname.<Integer>print(integers);
classname.print(integers);

受限的(bounded)

将泛型指定为另外一种类型的子类型,称为受限的。

<E extends student>//将E指定为student类的泛型子类型

注意事项

1、非受限泛型类型< E>等同于< E extends Object>

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!