泛型
泛型
Java泛型设计原则:只要在编译时期没有出现警告,那么运行时期就不会出现ClassCastException异常
泛型是提供给javac编译器使用的,它用于限定集合的输入类型,让编译器在源代码级别上,即挡住向集合中插入非法数据。但编译器编译完带有泛形的java程序后,生成的class文件中将不再带有泛形信息,以此使程序运行效率不受到影响,这个过程称之为“擦除”。
泛型类
泛型类就是把泛型定义在类上,用户使用该类的时候,才把类型明确下来
// <T> 表明这是一个泛型类 public class ObjTool<T> { public T obj; public T getObj() { return obj; } public void setObj(T obj) { this.obj = obj; } }
泛型方法
定义泛型方法….泛型是先定义后使用的
class ObjTool{ // <T> 表明这是一个泛型方法 public <T> T getT(T t){ return t; } public <T> void print(T t){ System.out.println(t); } }
// <T> 表明这是一个泛型接口 public interface Inter<T> { public abstract void show(T t); }
类型通配符
泛型中的<Object>
并不是像以前那样有继承关系的,也就是说List<Object>
和List<String>
是毫无关系的,所以需要有通配符代表所有类型
?号通配符表示可以匹配任意类型,任意的Java类都可以匹配…..
当我们使用?号通配符的时候:
设定通配符上限
List<? extends Number>
List集合装载的元素只能是Number的子类或自身
设定通配符下限
<? super Type>
传递进来的只能是Type或Type的父类
无论是设定通配符上限还是下限,都是不能操作与对象有关的方法,只要涉及到了通配符,它的类型都是不确定的!