泛型

1. JDK5之后,新增了泛型(Generic)语法,可以在类或方法中预支地使用未知的类型,集合创建时若不指定数据类型,默认为Object类型

2. 泛型的好处:①将运行时期的异常,转移到了编译时期;②避免了类型强转的麻烦

泛型的定义

泛型类

格式:
修饰符 class 类名<代表泛型的变量> {  }


例如:
class ArrayList<E>{ 
    public boolean add(E e){ }

    public E get(int index){ }
       ....
}

在创建对象的时候确定泛型
例如,ArrayList<String> list = new ArrayList<String>();

泛型方法

格式:
修饰符 <代表泛型的变量> 返回值类型 方法名(参数){  }

例如:
public class MyGenericMethod {      
    public <V> void show(V v) {
        System.out.println(v.getClass());
    }
    
    public <V> V show2(V v) {    
        return v;
    }
}

调用方法时,确定泛型
public class GenericMethodDemo {
    public static void main(String[] args) {
        // 创建对象
        MyGenericMethod mm = new MyGenericMethod();
        // 演示看方法提示
        mm.show("aaa");
        mm.show(123);
        mm.show(12.45);
    }
}

泛型接口:

格式:
修饰符 interface接口名<代表泛型的变量> {  }

例如:
public interface MyGenericInterface<E>{
    public abstract void add(E e);
    
    public abstract E getE();  
}

编写实现类时有两种方式:
①实现类上指定泛型 
public class MyImp1 implements MyGenericInterface<String> {
    @Override
    public void add(String e) {
        // 省略...
    }

    @Override
    public String getE() {
        return null;
    }
}

②实现类上继续不指定泛型,在创建实现类对象时指定泛型
public class MyImp2<E> implements MyGenericInterface<E> {
    @Override
    public void add(E e) {
            // 省略...
    }

    @Override
    public E getE() {
        return null;
    }
}

/*
 * 使用
 */
public class GenericInterface {
    public static void main(String[] args) {
        MyImp2<String>  my = new MyImp2<String>();  
        my.add("aa");
    }
}

泛型通配符:不知道使用什么类型来接收的时候,此时可以使用?,?表示未知通配符

public static void main(String[] args) {
    Collection<Intger> list1 = new ArrayList<Integer>();
    getElement(list1);
    Collection<String> list2 = new ArrayList<String>();
    getElement(list2);
}
public static void getElement(Collection<?> coll){}
//?代表可以接收任意类型
// 泛型不存在继承的概念

受限泛型

泛型的上限:类型名称 <? extends 类 > 对象名称
意义:只能接收该类型及其子类

泛型的下限:类型名称 <? super 类 > 对象名称
意义:只能接收该类型及其父类型
原文地址:https://www.cnblogs.com/svipero/p/12425941.html