Java泛型的定义与原理

为什么需要泛型?

同样的代码逻辑,只是参数类型不同,就需要再写一个方法

    public int compareInt(Integer x, Integer y) {
       if (x.compareTo(y) > 0){
           return x;
       }else {
           return y;
       }
    }
    public Float compareFloat(Float x, Float y) {
        if (x.compareTo(y) > 0){
            return x;
        }else {
            return y;
        }
    }

    public void test(){
        compareInt(1,2);
        compareFloat(1f,2f);
        
    }

如果我们用了泛型,就可以不写那么多方法

 public <T extends Comparable> T compareCommon(T x, T y) {
        if (x.compareTo(y) > 0){
            return x;
        }else {
            return y;
        }
    }
    
    public void test(){
        compareCommon(1,2);
        compareCommon(1f,2f);
    }

使用泛型指定数据类型,不需要强制类型转换,可以在编译期发现异常

    public void sys() {
        //不使用泛型 编译期正常,但是一运行就会报错“java.lang.ClassCastException”异常
        ArrayList list = new ArrayList<>();
        list.add("AAA");
        list.add("BBB");
        list.add(111);
        for (int i = 0; i < list.size(); i++) {
            String name = (String) list.get(i);
            System.out.println("name" + name);
        }
        //使用泛型限定类型
        ArrayList<String> list2 = new ArrayList();
        list2.add("CCC");
        //编译期就会报错
        //list2.add(222);
        for (int i = 0; i < list2.size(); i++) {
            String name2 = list2.get(i);
            System.out.println("name2" + name2);
        }
    }

总结泛型的好处:

  1. 适用于多种数据类型执行相同的代码
  2. 泛型中的类型在使用时指定,不需要强制类型转换

泛型类

可以有多个参数

    public class Normal1<T> {
        private T data;
    }

    public class Normal2<T, K> {
        private T data1;
        private K data2;
        
    }

泛型接口

    public interface Normal3<T>{
        public T next();
    }

两种不同的实现 T string

泛型方法

    public <T> T getName(T a){
        return (T) (a+"1");
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值