美文网首页
深入学习 Java 泛型 ( 一 )

深入学习 Java 泛型 ( 一 )

作者: 南宫凌霄 | 来源:发表于2019-11-11 13:26 被阅读0次

为什么我们需要泛型?

举个栗子

现在有个需求实现一个求和方法

// 这个方法只支持 int 类型
public int sum(int x, int y ){ 
  return x+y;
}

问题来了。如果我想对 float、double、long类型进行求和又该怎么来?????


不废话上代码:

    // 这个方法只支持 int 类型
    public int sum(int x, int y) {
        return x + y;
    }
    // 这个方法只支持 float 类型
    public float sum(float x, float y) {
        return x + y;
    }
    // 这个方法只支持 double 类型
    public double sum(double x, double y) {
        return x + y;
    }
    // 这个方法只支持 long 类型
    public long sum(long x, long y) {
        return x + y;
    }

从这段代码中,我们不难发现方法内的逻辑完全一样,只有传入的参数与返回值不同。那我们可不可以写出一个方法,可以根据传入参数不同自动进行计算?答案是可以的


如果用个方法代替之前的代码 是不是 更好一些

    // 这里是段伪代码
    public <T> T sum(T x, T y) {
        return x + y;
    }
    /**  
    此处是个事例代码, 
    return x + y; 这段是错误的。
    原因编译时并不知道x、y是什么类型 也无法进行 + 运算。
    此处只是为了介绍 泛型 的应用场景。
    */

泛型的作用 一

适用于多种数据类型执行相同的代码

上段代码可能有人不太了解,接下来再举个栗子。相比List大家都用过。

  public static void main(String[] args) {
        List list = new ArrayList();
        list.add("苍井井");
        list.add("波多多");
        list.add(666);

        for (int i = 0; i < list.size();i++){
            String avName = (String) list.get(i);
            System.out.println("敬爱的老师:" + avName);
        }
    }

这段代码有什么问题?
此段代码在编译上是不回报错,但是再运行时就会报"java.lang.Integer cannot be cast to java.lang.String" 类型转换异常


小表弟: List默认的存储类型是Object,add()的时候什么类型都可以存储进去,但是你再get() 取值的时候对数据进行了强制类型转换。把原有的int类型的'666'转换为String导致的。
大表哥:问题我们知道了,接下来我们该如何解决?


这时我们就可以利用泛型来,来约束 List的类型。这样就可以解决List存储类型不统一的问题。相比这是大家再泛型使用最比较多的方式。

    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("苍井井");
        list.add("波多多");
        // list.add(666); 这段再编译时就会报错,改为⬇️
        list.add("666");

        for (int i = 0; i < list.size();i++){
            String avName = list.get(i);
            System.out.println("敬爱的老师:" + avName);
        }
    }

泛型的作用 二

可以对存储类型数据进行类型约束,也节省了在获取的时候进行强制类型转换

深入学习 Java 泛型 ( 二 )

相关文章

网友评论

      本文标题:深入学习 Java 泛型 ( 一 )

      本文链接:https://www.haomeiwen.com/subject/pcscyctx.html