zoukankan      html  css  js  c++  java
  • think in java 泛型

       曾几何时,我们对java的泛型充满了好奇,但是感觉用起来有很爽,但又会在spring类型泛型的地方,遇到问题。

    我第一次的遇到泛型是在使用别人的BaseDao的时候,这是一个java封装hibernate框架的操作数据库的工具。但我使用

    的时候,只需要简单指定我需要数据库操作的类即可,非常方便,但是当我使用spring,想要对泛型的BaseDao<B>使用

    @Autowired,根据类型注入的时候,spring却给我找到了一个错,我觉得很奇怪,在我看来BaseDao就是一个新的类型,

    最起码他跟原来的BaseDao<A> 是有区别的,为什么spring不能识别出来。

         在一脸蒙蔽的状态下,一直保留到现在,知道看了think in java的泛型,这一章,才了解了泛型的基础内容,学习三原则

    what,why,how

        1什么是泛型?

           泛型是参数化类型。将类型作为参数,从而可以多种类型复用,

         2.为什么出现泛型?

      最初希望能够写出通用性更高的方法,我们使用object,因为

      java的单根继承,所有东西都是object的子类,所有最初我们使用object来保存对象,达到了通用的目的,但是却有在编译时期,我们

      可能将多种类型放进去,但是在拿出来类型转化时,转成了另外一种类型,这样只有在运行时,才能发现问题所在。

           然后有想到了类,针对某一个类A,如果要使用当前的容器,则需要继承这个类A,达到不能乱放的目的,但是java是单根继承,当

      原来就已经继承了某一个类的时候,就无法继承当前的类A。

           接口可能,又会比类更加的方便,避免了继承问题。但终归来说,这些都是面向具体的类,获取面向具体的接口的类,但是我们希望

      能够应用于不确定的对象,这个时候,泛型这个把 类型作为参数的东西就出来了,将要使用的对象作为参数。

        3.怎么使用泛型?

             泛型的使用非常简单,比如BaseDao的例子,BaseDao<T>,我们想要BaseDao<Student>,就将这个泛型应用于了Student这个对象,BaseDao<Teacher>

    则应用到了Teacher身上,我们从BaseDao的方法取出实际对象,也是我们制定的Student,Theacher。看起来他们已经完全的变化了,它们好像是有区别的,它们

    认识自己是什么类型。

           但是!为什么spring对泛型的注入@AutoWired 这种根据类型的注入的方式却会报错呢?它们明明表面上是两个不同的东西,

            我跟你说一件事情,java的泛型是‘伪’泛型!!!

           或者说叫擦出泛型。如果想要知道原因,获取其中的故事,评论过5条,则发下一期。 

       

         

  • 相关阅读:
    Windows脚本 Bat批处理命令使用教程
    [Jobdu] 题目1420:Jobdu MM分水果
    排序算法的时间复杂度和空间复杂度
    (转) CS的顶级会议和期刊
    句柄是什么?1
    批处理for命令详解(转)
    cmd批处理常用符号详解
    【转帖】请问两个大于号>>代表什么意思?
    今天玩angry birds
    C/C++数组名与指针区别深入探索
  • 原文地址:https://www.cnblogs.com/wangchaodong/p/11421059.html
Copyright © 2011-2022 走看看