您的位置:首页 > 其它

泛型限定

2015-11-09 20:37 393 查看
泛型的限定:
? extends E:接收E类型或者E的子类型。
?super E:接收E类型或者E的父类型。

定义T只能固定一种类型,定义?可以是任意类型。只想操作Person或者Person的子类类型。

使用泛型的限定。? extends E:接收E类型或者E的子类型 .

import java.util.*;

class Person

{
private String name;
Person(String name)
{
this.name = name;
}
public String getName()
{
return name;
}

}

class Student extends Person

{
Student(String name)
{
super(name);
}

}

class  GenericDemo7

{
public static void main(String[] args) 
{
ArrayList<Person> al = new ArrayList<Person>();

al.add(new Person("p1"));
al.add(new Person("p2"));
al.add(new Person("p3"));
show(al);

ArrayList<Student> al1 = new ArrayList<Student>();

al1.add(new Student("s1"));
al1.add(new Student("s2"));
al1.add(new Student("s3"));

show(al1);

//定义集合要保证左右两边的类型一致。
//两边只有一边定义泛型,也是可以支持,至少新老版本兼容。但是一样会出现,安全提示信息。

}

//传入的集合有一个特点,就是元素类型,要么是Person,要么是Person的子类型。
//这时可以使用泛型的高级应用,泛型的限定。

public static void show(Collection<? extends Person> coll)
{
Iterator<? extends Person> it = coll.iterator();
while(it.hasNext())
{
System.out.println(it.next().getName());     //在泛型方法中,不可以使用具体类型的方法,最多只能使用Object类中方法。
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: