详解Java泛型之4——一个例子理解泛型带来的好处

前面我介绍了关于泛型、通配符以及泛型擦除的相关知识点,大家可以参考以下文章:

详解Java泛型之1——入门泛型必懂的知识点

详解Java泛型之2——详解通配符

详解Java泛型之3——十分钟理解泛型擦除

今天我设计一个实例,分别通过重载、Object类型参数以及泛型三种方式来实现这个实例,让大家清楚地体会到使用泛型技术给我们带来的好处!

实例需求

有这样一个需求,自己写一个方法能够比较两个数值的大小,如果相等返回true,否则返回false。

通过重载实现

分析:因为在java中,常用数值包括Integer、Float、Double、Long我们可以利用重载的知识(同名不同参)设计四个方法来实现

public static boolean equal(Integer a,Integer b) {

      if (a.equals(b))

        return true;

      else

        return false;

   }

   public static boolean equal(Double a,Double b) {

      if (a.equals(b))

        return true;

      else

        return false;

   }

   public static boolean equal(Float a,Float b) {

      if (a.equals(b))

        return true;

      else

        return false;

   }

通过Object类型参数实现

很显然像上面这样的设计稍微有些麻烦,我们可以利用Object作为参数,通过一个方法就实现该需求,代码如下:

public static boolean equal(Object a,Object b) {

      if (a.equals(b))

        return true;

      else

        return false;

   }

通过泛型实现

但是像上面这样设计仍然有一个问题,因为参数是Object,所以可以实现equal(123,“abc”) 的比较,这与题目要求不符!题目要求是——比较两个数值的大小,而abc的类型是String。这个时候我们就可以通过泛型的知识来解决该问题了,我们看Integer、Float、Double、Long的源码发现,他们都继承了抽象类Number,于是我们可以使用泛型的边界值的知识点解决该问题,代码如下:

很显然通过泛型的方式实现,不仅让代码量减少了很多,还很容易的控制了参数的传入范围!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 由于时间仓促,有些地方未写完,后面会继续补充.如有不妥之处,欢迎及时与我沟通. 如果你也是在学习java,给你们推...
    分不清java阅读 2,848评论 0 15
  • 作为一个程序员,在找工作的过程中,都会遇到笔试,而很多笔试里面都包括java,尤其是作为一个Android开发工程...
    左神话阅读 8,085评论 15 295
  • 表情是什么,我认为表情就是表现出来的情绪。表情可以传达很多信息。高兴了当然就笑了,难过就哭了。两者是相互影响密不可...
    Persistenc_6aea阅读 126,060评论 2 7
  • 16宿命:用概率思维提高你的胜算 以前的我是风险厌恶者,不喜欢去冒险,但是人生放弃了冒险,也就放弃了无数的可能。 ...
    yichen大刀阅读 6,108评论 0 4