引言

我们使用object和泛型做形参,都是为了让这个方法能接收更多类型的对象,让程序变得更健壮,代码复用率更高。当我们回看自己写的代码时会发现,好像使用泛型的地方使用object也可以,使用object的地方使用泛型同样能实现,那么,本文就说一下,泛型和object的却别

正题

先上举例来说明一下object和泛型的使用场景吧,有这样一个需求:写一个数字排序的算法,我们知道java中的数字类型有Double、Float、Byte、Short、Integer 以及 Long。

方法一:每种数字类型写一个方法,需要写6个方法

class Sort {

void sort(Integer[] sort) {

// 排序

}

void sort(Double[] sort) {

// 排序

}

}

方法二:使用object,只需要写一个方法。

classSort {voidsort(Object[] sort) {

Number[] numbers=(Number[]) sort;//排序

}

}

方法三:使用泛型

classSort { voidsort(T[] sort) {

Number[] numbers=(Number[]) sort;//排序

}

}

好了,开始测试

public static voidmain(String[] args) {

Test t=newTest();

t.sort(new Integer[]{2,3});t.sort1(new Integer[]{2,3});} voidsort(T[] sort) {

Number[] numbers=(Number[]) sort;

}voidsort1(Object[] sort) {

Number[] numbers=(Number[]) sort;//排序

}

编译没毛病,运行也不会有毛病,别急我们再写一个列子

public static voidmain(String[] args) {

Test t=newTest();t.sort(new String[]{"a","b"});t.sort1(new String[]{"a","b"});

} voidsort(T[] sort) {

Number[] numbers=(Number[]) sort;//排序

}voidsort1(Object[] sort) {

Number[] numbers=(Number[]) sort;//排序

}

编译没毛病,运行一下:

我们最头疼的就是这种运行时的错误了,在大型项目中都需要编译好后部署然后运行,所以大家都希望问题在编译期就暴露出来,不要等到运行时才发现问题,那么问题来了有没有一种写法能够让他在编译器发现问题呢?看下面这个例子

classSort { voidsort(T[] sort) {

Number[] numbers=(Number[]) sort;//排序

}

}

测试代码

显然使用T extends这中写法能让问题在编译期暴露

问题的解决方法有了,总结一下

1、使用object作为形参当需要进行类型强制转换时,编译期不会检查类型是否安全,运行期才会检查

2、泛型写法范型的指定保证了代码的健壮性,避免了强转的风险.

完毕

结后语

我相信大家在写这个算法时选形参的类型时,大部分猿都不会选object,而选Number,是的选Number做形参,一切问题都扫除了,但是本文只讨论泛型的优点

java 泛型 比较_java 泛型和object比较相关推荐

  1. java泛型面试_Java泛型面试问题

    java泛型面试 Java面试中的通用面试问题在相当长的时间内在Java 5周围越来越普遍,许多应用程序都转移到Java 5上,并且几乎所有新的Java开发都发生在Tiger(Java 5的代号)上. ...

  2. java泛型特点_java泛型简单总结

    Java泛型简单总结 1)基本概念: 泛型(Generic Type或Generics)是 对Java语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类.可以把类型参数看做是使用参数化类型时 ...

  3. java 泛型 恶心_Java的泛型原来这样让人不舒服

    Type erasure Java泛型中的类型擦除,意为只在编译时刻进行类型检查,实际在运行时,编译器会自动插入相应的转换(cast)代码. List list = new ArrayList(); ...

  4. java泛型视频教程_Java泛型快速教程

    java泛型视频教程 泛型是Java SE 5.0引入的一种Java功能,在其发布几年后,我发誓那里的每个Java程序员不仅会听说过,而且已经使用过. 关于Java泛型,有很多免费和商业资源,而我使用 ...

  5. java 泛型 继承_java基础之泛型的继承

    关于泛型的基本介绍和理解请参考以下几篇文章,或查询更多资料: 本篇以简单的List<>方式来进行说明. ArrayList继承了List, ArrayList没有继承List List&g ...

  6. java 泛型 擦除_Java泛型和类型擦除

    一 前言:初识泛型 废话不说,先来看一段代码: public class Holder { private Object data; public Holder(Object data ){ this ...

  7. java泛型 包_Java泛型应用浅析

    Java泛型应用浅析 Java泛型,饿,这个东西吗,嚼一下还是有必要的.有啥用呢?小弟曾觉着吧,吹牛是条不错的出路,但没一次没有不吹破的.(绕吧^_^) 详解呢,没啥必要了,参见附件解压后Java泛型 ...

  8. java泛型实例化_java基础-泛型举例详解

    泛型 泛型是JDK5.0增加的新特性,泛型的本质是参数化类型,即所操作的数据类型被指定为一个参数.这种类型参数可以在类.接口.和方法的创建中,分别被称为泛型类.泛型接口.泛型方法. 一.认识泛型 在没 ...

  9. java 泛型示例_Java泛型示例教程–泛型方法,类,接口

    java 泛型示例 Java Genrics is one of the most important features introduced in Java 5. Java Genrics是Java ...

最新文章

  1. 比尔.盖茨11点忠告
  2. http android下载工具,Android实现下载工具的简单代码
  3. 计算机网络 实验六 静态路由配置,《计算机网络》实六 静态路由配置 实验报告.doc...
  4. Socket支持多用户并发访问的解决办法
  5. 【学术相关】博士毕业也会看第一学历吗?
  6. oracle常用函数api,Oracle-API OracleAPI、oracle10G函数大全(常用函数)、 联合开发网 - pudn.com...
  7. [C#]获得线程池中活动的线程数
  8. sql 循环处理数据_图文介绍 SQL 的三种查询计划处理模型,Spark 用了其中两个
  9. 调用kmeans_聚类分析—KMeans
  10. UpdatePanel 的 UpdateMode 和 ChildrenAsTriggers(较好的总结了前面几篇博客的内容)
  11. python中文分词工具_结巴中文分词工具的安装使用 Python分词教程
  12. java cxf文件上传下载,CXF webservice 上传以及下载文件
  13. 车载网络技术革新-CAN FD浅析
  14. IOS11降级到IOS10的操作方法(刷机有风险,操作需谨慎)
  15. 流程框图-各方框含义
  16. 中国科学家首次解析人脑“中央处理器”,领先美国脑计划
  17. JavaScript实现简单星星闪烁特效
  18. centos8在桌面添加pycharm和idea快捷方式没有allow launching选项问题
  19. c语言数字的写法田字格,数字100田字格怎么写
  20. 汇编语言_使用int16h中断读取键盘缓冲区

热门文章

  1. 计算机网络课设-小型校园网,计算机网络课设 小型校园网
  2. gta4 l3环境优化补丁_【安全刻不容缓】快给你们的爱7打打补丁吧 俄罗斯大佬的持续更新补丁包来了...
  3. java jpa更新数据_Java如何使用JPA更新实体对象?
  4. java中string范围_java中long parseLong(String s)方法中string(十进制数字)的范围?
  5. 机器学习(1)PLA
  6. c#之跟踪(c#高级编程系列)
  7. 语言木头折断放置问题_木头文化:干燥,是木成材的关键一步
  8. linux内存管理详解,Linux内存管理图文讲解.pdf
  9. ahb总线协议主机_IIC协议学习笔记
  10. 查看pcl版本 linux,成功安装 linux pcl (1.8.1版本) python-pcl