Java 泛型

定义:使用泛型可以指代任意对象类型;

定义一个C1类:里面有个Integer属性  给出构造方法 以及打印类型 和get set方法。

package com.xuyigang1234.chp05.sec02;

public class C1 {
    private Integer a;
    
    
    //构造方法
    public C1(Integer a) {
        super();
        this.a = a;
    }

    public Integer getA() {
        return a;
    }

    public void setA(Integer a) {
        this.a = a;
    }
    public void print() {
        System.out.println("a的类型是"+a.getClass().getName());
    }

}

定义一个C2类,里面定义一个String类型属性:

package com.xuyigang1234.chp05.sec02;

public class C2 {
    private String a;
    
    
    //构造方法
    public C2(String a) {
        super();
        this.a = a;
    }

    public String getA() {
        return a;
    }

    public void setA(String a) {
        this.a = a;
    }
    public void print() {
        System.out.println("a的类型是"+a.getClass().getName());
    }

}

假如有100个类型,类似的我们要写100个类似的类,很麻烦,这时候我们会想到多态,我们改写下试下:

用一个类实现:因为所有类都继承自Object类,所以直接定义成Object类型的属性;

package com.xuyigang1234.chp05.sec02;

public class CC {
    private Object object;
    
    
    public CC(Object object) {
        super();
        this.object = object;
    }

    public Object getObject() {
        return object;
    }

    public void setObject(Object object) {
        this.object = object;
    }
    public void print(){
        System.out.println("object的类型是"+object.getClass().getName());
    }

}

我们发现测试类里需要转型,类简便了,但是测试类复杂了,有没有一种类简单,测试也简单的方式呢,这时候,泛型诞生了;

我们先定义一个泛型类:

package com.xuyigang1234.chp05.sec02;

public class FanXing<T> {
    private T t;
    // 构造方法
    public FanXing(T t) {
        super();
        this.t = t;
    }

    public T getT() {
        return t;
    }

    public void setT(T t) {
        this.t = t;
    }
    //打印类型
    public void print() {
        System.out.println("t的类型是:"+ t.getClass().getName());
    }

}

写个测试类:

package com.xuyigang1234.chp05.sec02;

public class Test {
    public static void main(String[] args) {
        //test begin C1
        C1 c1= new C1(1);
        c1.print();
        Integer i1= c1.getA();
        System.out.println("i1="+i1);
        //end C1
        //test begin C2
        C2 c2= new C2("Java");
        c2.print();
        String s1= c2.getA();
        System.out.println("s1="+s1);
        //end C2
        
        //test begin CC   多态类
        CC cc= new CC(1);  //向上转型
        cc.print();
        Integer i2=(Integer) cc.getObject(); //向下转型,强制类型转换
        System.out.println("i2="+i2);
        
        CC ccs= new CC("Java");  //向上转型
        ccs.print();
        String s2=(String) ccs.getObject(); //向下转型,强制类型转换
        System.out.println("s2="+s2);                
        //end CC
        
        //test FanXing
        FanXing<Integer> fx = new FanXing<Integer>(1);
        fx.print();
        Integer i3 = fx.getT();
        System.out.println("i3="+i3);
        
        FanXing<String> fxStr = new FanXing<String>("Java");
        fxStr.print();
        String s3 = fxStr.getT();
        System.out.println("s3="+s3);
        
        // end FanXing
    }
}
输出:
a的类型是java.lang.Integer
i1=1
a的类型是java.lang.String
s1=Java
object的类型是java.lang.Integer
i2=1
object的类型是java.lang.String
s2=Java
t的类型是:java.lang.Integer
i3=1
t的类型是:java.lang.String
s3=Java
原文地址:https://www.cnblogs.com/xyg-zyx/p/10006289.html