Java 泛型分析

来源:互联网 发布:crm软件排名 编辑:程序博客网 时间:2024/05/18 07:05
public class Demo {    public static void main(String[] args){        Point p = new Point();        p.setX(10);  // int -> Integer -> Object        p.setY(20);        int x = (Integer)p.getX();  // 必须向下转型        int y = (Integer)p.getY();        System.out.println("This point is:" + x + ", " + y);               p.setX(25.4);  // double -> Integer -> Object        p.setY("东京180度");        double m = (Double)p.getX();  // 必须向下转型        double n = (Double)p.getY();  // 运行期间抛出异常        System.out.println("This point is:" + m + ", " + n);    }}class Point{    Object x = 0;    Object y = 0;    public Object getX() {        return x;    }    public void setX(Object x) {        this.x = x;    }    public Object getY() {        return y;    }    public void setY(Object y) {        this.y = y;    }}



可以用Object,但是用Object,向下转型的时候编译期没有问题,但是运行时可能抛出exception。

  double n = (Double)p.getY();  // 运行期间抛出异常

泛型可以解决这个问题。它可以接受任意类型的数据。所谓“泛型”,就是“宽泛的数据类型”,任意的数据类型。

public class Demo {    public static void main(String[] args){        // 实例化泛型类        Point<Integer, Integer> p1 = new Point<Integer, Integer>();        p1.setX(10);        p1.setY(20);        int x = p1.getX();        int y = p1.getY();        System.out.println("This point is:" + x + ", " + y);               Point<Double, String> p2 = new Point<Double, String>();        p2.setX(25.4);        p2.setY("东京180度");        double m = p2.getX();        String n = p2.getY();        System.out.println("This point is:" + m + ", " + n);    }}// 定义泛型类class Point<T1, T2>{    T1 x;    T2 y;    public T1 getX() {        return x;    }    public void setX(T1 x) {        this.x = x;    }    public T2 getY() {        return y;    }    public void setY(T2 y) {        this.y = y;    }}


泛型方法

public class Demo {    public static void main(String[] args){        // 实例化泛型类        Point<Integer, Integer> p1 = new Point<Integer, Integer>();        p1.setX(10);        p1.setY(20);        p1.printPoint(p1.getX(), p1.getY());               Point<Double, String> p2 = new Point<Double, String>();        p2.setX(25.4);        p2.setY("东京180度");        p2.printPoint(p2.getX(), p2.getY());    }}// 定义泛型类class Point<T1, T2>{    T1 x;    T2 y;    public T1 getX() {        return x;    }    public void setX(T1 x) {        this.x = x;    }    public T2 getY() {        return y;    }    public void setY(T2 y) {        this.y = y;    }       // 定义泛型方法    public <T1, T2> void printPoint(T1 x, T2 y){        T1 m = x;        T2 n = y;        System.out.println("This point is:" + m + ", " + n);    }}



泛型接口

public class Demo {    public static void main(String arsg[]) {        Info<String> obj = new InfoImp<String>("www.weixueyuan.net");        System.out.println("Length Of String: " + obj.getVar().length());    }}//定义泛型接口interface Info<T> {    public T getVar();}//实现接口class InfoImp<T> implements Info<T> {    private T var;    // 定义泛型构造方法    public InfoImp(T var) {        this.setVar(var);    }    public void setVar(T var) {        this.var = var;    }    public T getVar() {        return this.var;    }}


http://www.weixueyuan.net/view/6321.html




原创粉丝点击