/*泛型限定:
?:代表通配符,也称点位符
? extends E:代表可以接收E或者E的子类型 称为上限
? super E:代表可以接收E或者E的父类型 称为下限*/
/*上限例子 ? extends E*/
import java.util.*;
class aaa
{
public static void main(String[] args)
{
ArrayList<Person> al = new ArrayList<Person>();
al.add(new Person("abc"));
al.add(new Person("bbb"));
al.add(new Person("aba"));
printcoll(al);
ArrayList<Student> al1=new ArrayList<Student>();
al1.add(new Student("a--b--c"));
al1.add(new Student("a--a--c"));
al1.add(new Student("a--c--c"));
printcoll(al1);
}
public static void printcoll(ArrayList<? extends Person> al)//上限
{
Iterator<? extends Person> it=al.iterator();
while(it.hasNext())
{
System.out.println(it.next().getName());
}
}
}
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);
}
}
/*--------------------------------------------------------------------*/
/*下限例子? super E*/
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 bbb
{
public static void main(String [] args)
{
TreeSet<Person> ts = new TreeSet<Person>(new imp());
ts.add(new Person("bbb"));
ts.add(new Person("aaa"));
ts.add(new Person("ccc"));
printcoll(ts);
}
public static void printcoll(TreeSet<? super Student> ts)//下限
{
Iterator<? super Student> it=ts.iterator();
while(it.hasNext())
{
Person p=(Person)it.next();
System.out.println(p.getName());
}
}
}
class imp implements Comparator<Person>
{
public int compare(Person s1,Person s2)
{
return s1.getName().compareTo(s2.getName());
}
}
【JAVA编程】泛型高级应用之泛型限定
最新推荐文章于 2024-07-31 14:24:02 发布