黑马程序员——Java基础——泛型

来源:互联网 发布:海南环岛高铁停运 知乎 编辑:程序博客网 时间:2024/04/30 05:56

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

泛型是JDK1.5版本以后出现的新特性,用于解决安全问题,是一个类型安全机制。

好处:1、将运行时期出现的问题转移到编译时期,方便于程序员解决问 题,让运行事情问题减少,安全。
2、避免了强制转换麻烦。

格式:通过< >来定义要操作的引用数据类型。在集合框架很常见。
如下面:

import java.util.*;public class FanXingTest {    public static void main(String[] args){        ArrayList<Integer> al=new ArrayList<Integer>();        al.add(12);        al.add(15);        al.add(20);        Iterator it=al.iterator();        while(it.hasNext()){            System.out.println(it.next());        }    }}

泛型类:当类中要操作的引用数据类型不确定的时候。
泛型类定义的泛型,在整个类中有效,如果被方法使用,那么泛型类的对象明确要操作的具体类型后,所有要操作的类型就已经固定了。

为了让不同方法可以操作不同类型,而且类型还不确定,那么可以将泛型定义在方法上。

import java.util.*;public class FanXingTest4 {    public static void main(String[] args){        Methoc<Integer> m=new Methoc<Integer>();        m.show(123);        //m.show("asdf");     //这里是错误的,因为show可以传递的参数类型已经固定了,只能是整形        m.print("asdf");     //print方法上定义了泛型,所以它不爱限制        m.say("bbb");    }}class Methoc<AA>{    public void show(AA q){        System.out.println(q);    }    public <QQ> void print(QQ q){        System.out.println(q);    }    public static <BB> void say(BB b){   //say方法是静态的,所以它不可以访问类上定义的泛型,必须将泛型定义在方法上        System.out.println(b);    }}

泛型也可以定义在接口上。
如:

import java.util.*;public class FanXingTest5 {    public static void main(String[] args){        Test1 t=new Test1();        t.say("ads");        //t.say(123);     //错误,只能传递String 类型    }}interface jiekou<QQ>{    public void say(QQ q);}class Test1 implements jiekou<String>{    public void say(String q){        System.out.println(q);    }}

但如果类操作的类型也不确定,可以这样:

import java.util.*;public class FanXingTest5 {    public static void main(String[] args){        Test1<Integer> t=new Test1<Integer>();        t.say(123);    }}interface jiekou<QQ>{    public void say(QQ q);}class Test1 <QQ> implements jiekou<QQ>{    public void say(QQ q){        System.out.println(q);    }}

泛型限定:
? extends E 泛型可以接收E,也可以接收E的子类型;
? super T 泛型可以接收T,也可以接收T的父类型。

import java.util.*;public class TongPeiFu2 {    public static void main(String[] args){        ArrayList<Persona> a=new ArrayList<Persona>();        a.add(new Persona("ads",23));        a.add(new Persona("sss",11));        a.add(new Persona("oui",62));        ArrayList<Studenta> a2=new ArrayList<Studenta>();        a2.add(new Studenta("人有有",23));        a2.add(new Studenta("小丽",11));        a2.add(new Studenta("方方",62));        show(a);        show(a2);    }    public static void show(ArrayList<? extends Persona> a){        Iterator it=a.iterator();        while(it.hasNext()){            System.out.println(it.next());        }    }}class Persona{    String name;    int age;    Persona(String name, int age){        this.name=name;        this.age=age;    }    public String toString(){        return this.name;    }}class Studenta extends Persona{    Studenta(String name,int age){        super(name,age);    }}
0 0