Java泛型
1.泛型概述
泛型的本质是为了参数化类型(即限制参数类型为我们指定泛型类型)
如这样:给list集合指定类型String- //比如给List集合指定一个泛型(String),那么存入List集合中的元素必须要是String类型
- List<String> list= new ArrayList<String>();
复制代码 2.泛型的优点
- 限制变量的类型,我们的类型是安全的(编译时的类型检测)
- 消除源码中的强制类型转换
3.泛型分类
(1)泛型类
当我们在类中操作的引入数据类型不确定时,可以根据需要自定义泛型支持的类
下面为一个定义泛型类的例子- //此处T可以写任意标识
- //在实例化泛型类时,必须指定T的具体类型
- public class Generic<T>{
- //private 泛型标识 成员变量名
- private T key;
-
- public Generic(T key){
- this.key=key;
- }
-
- public T set(){
- return null ;
- }
- }
复制代码 实例化泛型类- Generic<String> generic1 = new Generic<String>("Hello");
- Generic<Integer> generic2 = new Generic<Integer>(123456);
复制代码 (2)泛型接口
泛型接口与泛型类的定义与使用基本相同,下面为定义泛型接口和实现的例子
定义:- public interface Generic_interface<T,E> {
- //T,E为我们指定的泛型类型,此处也是返回值和参数
- public T set(T t);
- public E get(E e);
- }
复制代码 实现:
实例代码如下:- public class Generics<T,E> implements Generic_interface<T,E>{
- @Override
- public T set(T t) {
- return null;
- }
- @Override
- public E get(E e) {
- return null;
- }
- }
复制代码 实例代码如下:- public class Generics<String,Integer> implements Generic_interface<String,Integer>{
- @Override
- public String set(String string) {
- return null;
- }
- @Override
- public Integer get(Integer integer) {
- return null;
- }
- }
复制代码 (3)泛型方法
当我们只需关心某个方法时,我们可以直接定义泛型方法
定义与实现- public class Generics{
- public static<T> void set(T[] t){
- for(T element:t){
- System.out.println(element);
- }
- }
- public static void main(String[] args) {
- Integer[] array={1,2,4};
- String[] array1={"Java","C++"};
- set(array);
- set(array1);
- }
- }
复制代码 4.泛型擦除
Java泛型是一种伪泛型,Java在编译期间,所有的泛型都会被擦除(类型擦除)
比如说把泛型T擦除为Object,T extends xxx擦除为限定类型xxx
例子:
[code]List list = new ArrayList();list.add(12);//1.编译期间直接添加会报错//list.add("a");Class |