关于泛型方法和泛型类的一点思考

ArrayAlg.java 

public class ArrayAlg {
    public static <T extends Comparable> Pair<T> minmax(T[] a){
        if(a ==null||a.length==0)
            return null;
        T min=a[0];
        T max=a[0];
        for (int i=1;i<a.length;i++){
            if(min.compareTo(a[i])>0)
                min=a[i];
            if(max.compareTo(a[i])<0)
                max=a[i];
        }
        return new Pair<T>(min,max);
    }
}

Pair.java

public class Pair<T> {
    private T first;
    private T second;
    public Pair(T first,T second){
        this.first=first;this.second=second;
    }
    public T getFirst() {
        return first;
    }

    public T getSecond() {
        return second;
    }
}

Test.java

public class Test {
    public static void main(String[] args) {
           String[] a={"XTY","LPJ","A","GY"};
        Pair<String> mm=ArrayAlg.minmax(a);
        System.out.println("min=" + mm.getFirst());
        System.out.println("max=" + mm.getSecond());
    }
}

min输出第一个字母最小的字符串,max输出第一个字母最大的字符串

本例中输出:min=A,max=XTY

Test2.java

import java.time.LocalDate;
public class Test {
    public static void main(String[] args) {
        
        LocalDate[] birthdays = {
                LocalDate.of(1906, 12, 9),
                LocalDate.of(1999,12,4),
                LocalDate.of(1815, 12, 10),
        };
        Pair<LocalDate> mm=ArrayAlg.minmax(birthdays);
       System.out.println("min=" + mm.getFirst());
        System.out.println("max=" + mm.getSecond());
}
}

min输出最小的日期1815-12-10,max输出最大日期1999-12-4

代码来源:《Java核心技术第一卷 11版》P328-P330

除了书中介绍外简要谈谈我的理解:

1、
泛型类用<T>的话则起到类似于黑盒测试的作用,使用人员关注点不在于内部怎么实现的,泛型类的编写交给开发人员即可,但是开发人员要表明外界可以用哪些类型测试,本例中由于compareto接口的存在所以Test类中只能用实现了compareto接口的类型比如String,LocalDate,Integer使用。

2、

ArrayAlg类和Pair类都用到了类型变量T,相当于可以接纳外界很多种类型,比如Test.java中外界用的是String[]测试,而Test2.java中外界用的是LocalDate[]测试,泛型类的使用使得两者都可以得到结果输出

3、

Test和Test2中   Pair<String> mm=ArrayAlg.minmax(a);不能写成Pair<T> mm=ArrayAlg.minmax(a);这类似于向下转型。从泛型Pair类转到具体的Pair类,否则编译器无法识别Pair具体是什么类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值