泛型——(3) 泛型的萬用字元、上限與下限
阿新 • • 發佈:2018-12-09
萬用字元: “?” 萬用字元就是當集合中的型別不確定時,可以用“?” 萬用字元來代替表示。這樣任意型別都能進入集合。
package cn.itcast.p5.generic.advance.demo; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class GenericAdvanceDemo { /** * @param args */ public static void main(String[] args) { ArrayList<String> al = new ArrayList<String>(); al.add("abc"); al.add("hehe"); ArrayList<Integer> al2 = new ArrayList<Integer>(); al2.add(5); al2.add(67); printCollection(al); printCollection(al2); } /** * 迭代並列印集合中元素。 * @param al */ public static void printCollection(Collection<?> al) { Iterator<?> it = al.iterator(); while(it.hasNext()){ // T str = it.next(); // System.out.println(str); System.out.println(it.next().toString()); } } }
控制檯輸出:
泛型的上限:
? extends E:接收E型別或者E的子型別物件
爹固定了下面隨便變
package cn.itcast.p5.generic.advance.demo; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import cn.itcast.p2.bean.Person; import cn.itcast.p2.bean.Student; import cn.itcast.p2.bean.Worker; public class GenericAdvanceDemo2 { /** * @param args */ public static void main(String[] args) { ArrayList<Person> al = new ArrayList<Person>(); al.add(new Person("abc",30)); al.add(new Person("abc4",34)); ArrayList<Student> al2 = new ArrayList<Student>(); al2.add(new Student("stu1",11)); al2.add(new Student("stu2",22)); ArrayList<String> al3 = new ArrayList<String>(); al3.add("stu3331"); al3.add("stu33332"); printCollection(al2); printCollection(al); } /** * 迭代並列印集合中元素。 * * 可以對型別進行限定: * ? extends E:接收E型別或者E的子型別物件。上限! * * @param al */ public static void printCollection(Collection<? extends Person> al) {//Collection<Dog> al = new ArrayList<Dog>() Iterator<? extends Person> it = al.iterator(); while(it.hasNext()){ // T str = it.next(); // System.out.println(str); // System.out.println(it.next().toString()); Person p = it.next(); System.out.println(p.getName()+":"+p.getAge()); } }
泛型的下限:
? super E :接收E型別或者E的父型別。
package cn.itcast.p5.generic.advance.demo; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import cn.itcast.p2.bean.Person; import cn.itcast.p2.bean.Student; import cn.itcast.p2.bean.Worker; public class GenericAdvanceDemo2 { /** * @param args */ public static void main(String[] args) { ArrayList<Person> al = new ArrayList<Person>(); al.add(new Person("abc",30)); al.add(new Person("abc4",34)); ArrayList<Student> al2 = new ArrayList<Student>(); al2.add(new Student("stu1",11)); al2.add(new Student("stu2",22)); ArrayList<String> al3 = new ArrayList<String>(); al3.add("stu3331"); al3.add("stu33332"); printCollection(al2); printCollection(al); } /** * 迭代並列印集合中元素。 * * ? super E :接收E型別或者E的父型別。下限! * @param al */ public static void printCollection(Collection<? super Student> al){ Iterator<? super Student> it = al.iterator(); while(it.hasNext()){ System.out.println(it.next()); } } }