• 泛型


    java中为了重复类的使用可以对多态类型进行转换,以提高代码的复用性。但是当出现转型错误时只会在运行时才回出现,此时通过泛型类使用,在编译时便可以发现。

    1、泛型类

    下述列子中,<T1,T2>用来传递参数的类型,一般用字母K代表键名,V代表键值,E代表异常或者错误,T代表一般类型。  

    泛型只能用来表示引用类型,而不能使用基本类型,如int,double,char, 但传递这些类型不会报错,java会自动将这些类型转换成包类型。

    例如:

    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;
    }
    }
    ```

    2.泛型方法

    `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 static <V1, V2> void printPoint(V1 x, V2 y){
    V1 m = x;
    V2 n = y;
    System.out.println("This point is:" + m + ", " + n);
    }


    }

    3.泛型接口

    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;
    }
    }

    4、类型擦除

    当使用泛型类型时没有申明类型时就会擦除泛型类型;

    5、限制泛型类型

    当使用一部分类型就够时,不限制泛型类型会导致错误;

    public <T extends Number> T getMax(T array[]){
    T max = null;
    for(T element : array){
    max = element.doubleValue() > max.doubleValue() ? element : max;
    }
    return max;
    }

     

  • 相关阅读:
    topcoder srm 640 div1
    具体数学第二版第四章习题(5)
    topcoder srm 635 div1
    topcoder srm 630 div1 (2-SAT and SCC template)
    具体数学第二版第四章习题(4)
    topcoder srm 625 div1
    具体数学第二版第四章习题(3)
    具体数学第二版第四章习题(2)
    topcoder srm 615 div1
    具体数学第二版第四章习题(1)
  • 原文地址:https://www.cnblogs.com/ouyangping/p/7308793.html
Copyright © 2020-2023  润新知