泛型

2018-09-17  本文已影响0人  东风谷123Liter

Java1.5之后出现的类型安全机制;

好处:

格式:

什么时候使用:

用的地方:

泛型的缺点:

注意:

泛型的高级应用:

public static void main(String[] args) {
           ArrayList<String> al1 = new ArrayList<String>();
           al1.add("abc");
           al1.add("djhf");
           al1.add("djhf01");
           al1.add("djhf02");
           ArrayList<Integer> al2 = new ArrayList<Integer>();
           al2.add(3);
           al2.add(4);
           al2.add(5);
           al2.add(6);
     }
     public static void printIterator(ArrayList al) {
           Iterator it = al.iterator();
           while(it.hasNext()) {
                System.out.println(it.next());
      }
       printIterator(al1);
       printIterator(al2);

问题:

printIterator方法中,并没有指定迭代器的数据类型,为什么也能打印成功?**

因为Java1.4版本之前没有泛型,Java1.5之后为了兼容之前的版本,此处参数传递时不指定数据类型也是可以的;但你这样数据类型不太安全。

还可以这样写:**

public static void printIterator(ArrayList<?> al) {
           Iterator<?> it = al.iterator();
           while(it.hasNext()) {
                System.out.println(it.next());
           }
public static <T> void printIterator(ArrayList<T> al) {
           Iterator<T> it = al.iterator();
           while(it.hasNext()) {
                System.out.println(it.next());
           }
     }

泛型的限定:

要想灵活的利用好泛型,泛型限定就是最好的选择。

上限;<?> extends T
下线;​<?> super T

class Person01{
     private String name;
     private int age;
     Person01(String n, int a){
           this.name = n;
           this.age = a;
     }
    public String getName() {
           return name;
     }
     public int getAge() {
           return age;
     }
}
//Student01继承Person01类
class Student01 extends Person01{
     Student01(String n, int a){
           super(n, a);
     }
}
public static void sopp(Person01 p) {
           System.out.println(p.getName()+"..."+p.getAge());
     }
}
public static void main(String[] args) {
           ArrayList<Person01> al = new ArrayList<Person01>();
           al.add(new Person01("lily", 12));
           al.add(new Person01("Tom", 44));
           al.add(new Person01("Litre", 22));
           al.add(new Person01("Greson", 52));
           for(int i=0; i<al.size(); i++) {
                sopp(al.get(i));
           }
     }
public static void sopp(ArrayList<? extends Person01> al) {
           Iterator<? extends Person01> it = al.iterator();
           while(it.hasNext()) {
                System.out.println(it.next().getName());
           }
     }
sopp(al);
ArrayList<Student01> al1 = new ArrayList<Student01>();
           al1.add(new Student01("lily0001", 12));
           al1.add(new Student01("Tom0001", 44));
           al1.add(new Student01("Litre0001", 22));
           al1.add(new Student01("Greson0001", 52));
           sopp(al1);

上一篇 下一篇

猜你喜欢

热点阅读