泛型使用的总结:
public static void main(String[] args) {
ArrayList<String> alOne = new ArrayList<String>();
alOne.add("abc");
alOne.add("cde");
alOne.add("hji");
ArrayList<Integer> alTwo = new ArrayList<Integer>();
alTwo.add(100);
alTwo.add(200);
alTwo.add(300);
printColle(alOne);
printColle(alTwo);
}
public static <T> void printColle(ArrayList<T> al) {
Iterator<T> iterator = al.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
在上面的例子中运行结果是:
把上面的泛型T改为? 运行结果是一样的。
但是要注意一下泛型的限定中?的使用:
public static void main(String[] args) {
ArrayList<Person> alOne = new ArrayList<Person>();
alOne.add(new Person("abc"));
alOne.add(new Person("cde"));
alOne.add(new Person("hji"));
ArrayList<Student> alTwo = new ArrayList<Student>();
alTwo.add(new Student("123"));
alTwo.add(new Student("456"));
alTwo.add(new Student("789"));
printColle(alOne);
printColle(alTwo);
}
// ?号是通配符,也是占位符
// 泛型的限定:
// ? extends E 泛型的上限 可以接受E或者E的子类型
// ? super E 泛型的下限 可以接受E或者E的父类型
public static void printColle(ArrayList<? extends Person> al) {
Iterator<? extends Person> iterator = al.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
class Person {
String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
class Student extends Person {
public Student(String name) {
super(name);
}
}