泛型

泛型

泛型:在类定义时不指定类中的具体数据类型,而是用标识符来替代,在外部调用时自己指定其类型。提升了代码的灵活性。

1. 泛型的应用

public class Generics_0117<Y,M,D> {
     
    public Y getYear() {
     
        return year;
    }

    public void setYear(Y year) {
     
        this.year = year;
    }

    public M getMonth() {
     
        return month;
    }

    public void setMonth(M month) {
     
        this.month = month;
    }

    public D getDay() {
     
        return day;
    }

    public void setDay(D day) {
     
        this.day = day;
    }
    
    private Y year;
    private M month;
    private D day;
}

public class Test {
     
    public static void main(String[] args) {
     
        Generics_0117<Integer,Integer,Float> time = new Generics_0117();//自定义类型
        time.setYear(2021);
        time.setMonth(01);
        time.setDay(0.5f);
        System.out.println("现在时间:"+time.getYear()+"年"+time.getMonth()+"月"+time.getDay()+"日");
    }
}

2.泛型的通配符

在方法的参数泛型不明确的时候可以用"?"去代替

public class Test {
     
    public static void main(String[] args) {
     
        ArrayList<Integer> arrayList = new ArrayList();
        arrayList.add(1);
        ArrayList<String> arrayList1 = new ArrayList();
        arrayList1.add("你好");
        data(arrayList);
        data(arrayList1);
    }
    public static  void data(ArrayList<?> list){
     
        System.out.println(list);
    }
}

3.泛型的上限与下限

上限:表示实例化的具体数据类型可以是上限数据类型的子类或上限本身
使用方法:类名

下限:表示实例化的具体数据类型可以是下限父类或下限本身
使用方法:类名

public class Data<T> {
     
    public static void main(String[] args) {
     
    //上限
        test1(new Data<Number>());
        test1(new Data<Integer>());
        test1(new Data<Double>());
	//下限
        test2(new Data<String>());
        test2(new Data<Object>());
    }
    public static void test1(Data<? extends Number> data){
     

    }

    public static void test2(Data<? super String> data){
     

    }
}

你可能感兴趣的:(java)