用惯了ArrayList,HashMap的你,有没有想过一件事:
为什么会出现泛型?

那么这一篇博客就来简单的聊聊出现泛型的原因

在JavaSE5之前,也就是没有泛型,你写出的代码可能是这样的
(忽略我的lombok,当他不存在即可):

@Data
@AllArgsConstructor
public class Holder {
    private String name;
}
---------------------------------------------------
@Data
@AllArgsConstructor
public class Holder2 {
    private Object name;

    public static void main(String[] args) {
        Holder2 holder2 = new Holder2("Abalone");
        //由于没有泛型,我们需要使用不安全的向下转型
        String nameForHolder2 = (String) holder2.getName();
        holder2.setName("这里可以存任意东西(但是我们本应该只允许其存在String)");
        String s = (String) holder2.getName();
        holder2.setName(new Date());//这里的Object将其设为了日期
        Date date = (Date) holder2.getName();//我甚至能在holder的name字段中取出日期
    }
}

当你仔细地看完了这两段简单的代码之后,一个重要的问题就显现出来了,便是字段name的不确定性,但这些是没有编译器检查的(向下转型并不安全),除此以外,作为面向对象的语言,我并不想每出现一个新的需求就要编写一个像Holder这样的类,即使他们两个的变化只有一个字段的类型,因此,我们会想要用一个暂时的参数类型来代替Holder中的"String",职于这个暂时的参数是什么,等我们用的时候再指定就好了~

于是,对于Java来说的一个重要改变,泛型就出现了


一般的类和方法,只能使用具体的类型:要么是基本类型,要么是自定义的类,如果要编写可以应用于多种类型的代码,这种刻板的限制对代码的束缚会很大       --- ---Bruce Eckel

这篇文章可以说是非常短小了,今天写这篇文章的主要目的是表示我还活着(博客还在正常运行),最后,祝我自己能稳扎稳打的度过这个学期的最后冲刺

Q.E.D.