泛型是什么
泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,
此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。
ArrayList list = new ArrayList(); list.add("abc"); list.add(123);
集合在不指定泛型类型的情况下,可以添加任意引用类型。会导致意外的错误发生。也可以将运气期间的错误提前到编译器,如果指定泛型类型,那么不符合要求的类型编译不会通过。
泛型类、泛型接口、泛型方法
泛型类,泛型参数定义于类名之后,<> 中定义的是泛型的形参,多个形参之间逗号隔离
public class GenericClass<T,E> { T t; public T getT() { return t; } public void setT(T t) { this.t = t; } }
泛型接口,定义与泛型类相似
public interface GenericInterface<K,V>{ public abstract V getValue(K k); }
泛型方法,泛型参数定义在返回值类型之前
public <T> void sleep(T t){ System.out.println(t); }
通配符、上下边界通配符
泛型通配符: ?
上边界通配符:<? super E>
下边界通配符:<? extends E>
通配符出现的原型是:集合没有协变,数组支持协变(多态)
泛型通配符不用于定义对象,用于方法接收参数