泛型以及通配符
当使用泛型类或者泛型接口,传递的数据中,泛型的类型不确定,可以通过通配符表示<?>表示.一旦程序当中使用泛型通配符后,只能使用Object类中共性的方法. 集合中元素自身类型的方法无法使用.(这是一种多态的写法,)
泛型作为形参写在方法参数列表内
举个栗子:
泛型应用在类中 public class Pue<E>{ private E age; public void set(E name){ this.name=name; } } 当我们使用泛型修饰一个类的时候,我们大多使用泛型来修饰成员变量和get set方法以及构造方法 泛型应用在方法中 public static<E> void methods(E age){ System.out.println(E.getClass()); } 当我们使用泛型修饰一个类的时候,在类的修饰符后面加上泛型的修饰符号<随意的符号就当定义变量>然后就可以在方法内使用泛型来修饰参数或者局部变量,
备注;当我们调用了使用了带有泛型的方法或者,类,这个泛型一定会被固定.必须是确定的类型,输入的是什么参数,泛型会自动成为相同的类型.
通配符,当我们需要对泛型进行限制的时候,java为我们提供了一个符号,通配符来对泛型进行限制,简称
受限泛型
受限泛型分为两种限制方式: 上限extends 下限super
定义格式
//定义方法 此时可以接受任意的数据类型 public static void getElement(Collection<?> coll){//...} //定义方法,此时我只让方法接收数字类型 Number类型和Number的子类类型 public static void getElement(Collection<? extends Number> coll){//....} //定义方法,此时我只让接收Number类型及其以上的类型 public static void getElement(Collection<? super Number> coll){//...}
通配符不能直接用来定义集合的数据类型,程序会混乱,并且数据类型被定义了通配符的集合无法存储任何类型的数据
栗子:
ArrayList<?> list= new ArrayList<>();
上面这个集合现在无法储存任何的数据.