通配符,泛型上下限

来源:互联网 发布:淘宝海尔冰箱正品吗 编辑:程序博客网 时间:2024/05/18 21:42

一:通配符

因为泛型是初始化的时候才确定数据的类型,而接受这个对象或对象的这个属性的方法确是固定的,所以需要对传入这个方法的这些个属性的类型进行判断和限制,不然,一个只能出来Integer类型的方法如果传入了String类型,这个方法执行的过程中就会出现错误。如果这个方法可以处理任何类型的数据,就可以使用通配符“ ?”来进行接收。

范例1:

package haizhu.com;class Student<T>{private T name;public T getName() {return name;}public void setName(T name) {this.name = name;}}public class GenericDemo01 {public static void function(Student<?> s){//使用“ ?”表示这个方法可以接收T对应的属性可以是任何数据类型System.out.println("姓名是:"+s.getName());}public static void main(String[] args) {Student<String> s = new Student<String>();s.setName("Haizhu");function(s);}}

二:泛型上限和下限

但是一般的时候,有些方法只能处理一部分数据类型,这时候就可以使用上限和下限来确定这个范围,格式如下:

泛型上限:

<? extends 类>

范例2:

public static void function(Student<? extends Number> s){System.out.println("姓名是:"+s.getName());}
表示只能接收Number这个类以及这个类的子类的数据类型。(extends表继承,就是这个类下面的东西)

泛型下限:

<? super 类>
范例3:

public static void function(Student<? super Number> s){System.out.println("姓名是:"+s.getName());}
表示只能接收Number这个类以及这个类的父类的数据类型。(super表父类,超过这个类的东西)